2016-09-24 76 views
-1

我有2列。 CustNo和CustBal在不使用max的情况下选择最高值?

试图编写脚本以选择具有最高余额的CustNo。我尝试使用max,如果我只使用CustBal列,但可以使用它,但在这种情况下不能使用。我认为它可能是CUSTBAL之后的某个WHERE项目?

SELECT CUSTNO, CUSTBAL 
FROM CUSTOMER 
WHERE CUSTBAL 
+0

我越来越近了。现在我有最高的余额,但不包括CustNo SELECT CUSTNO,CUSTBAL FROM CUSTOMER; SELECT MAX(CustBal)FROM CUSTOMER –

+0

添加样本数据和预期结果 –

+0

术语:您正在尝试编写查询。不是你写的所有东西都是一个“剧本”。 – mathguy

回答

1

为什么不使用MAX?

您需要单独计算MAX,因为只能在查询结束时执行该操作(在SELECT子句中使用聚合函数MAX),并且不能在单个查询中混合单个行和聚合。所以你必须在子查询中计算MAX。

select custno, custbal 
from customer 
where custbal = (select max(custbal) from customer) 
; 
+0

谢谢!那样做了!我从一开始就滥用max。 –

+0

说实话,你可以在同一个查询中混合单独的行和ANALYTIC函数,但在这种情况下,你仍然需要一个“外部”查询来选择你所需要的行。在你学习的时候,分析功能还需要几个月的时间(可能)。请将其提交以备将来参考! – mathguy

3

或者:

select * from 
(select custno, custbal from customer order by custbal desc) 
where rownum = 1 

..如果你有12C:

select custno, custbal from customer 
order by custbal desc 
fetch next 1 rows only 

但是这些只会返回即使有多个客户提供相同的最高平衡一行。如果你想与最高custbal,那么所有记录:

select custno, custbal from 
(select *, dense_rank() over (order by custbal desc) as rank from customer) 
where rank = 1 
0


喜尼基,
您也可以使用简单的GROUP BY功能,

SELECT CUSTNO, MAX(CUSTBAL) 
    FROM CUSTOMER 
     GROUP BY CUSTNO 
     ORDER BY CUSTNO 

GROUP BY - 为您提供了最大CUSTBAL的尊重CUSTNO
ORDER BY - 按照CUSTNO列的升序显示结果

相关问题