2016-09-24 32 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列的升序顯示結果

相關問題