2017-08-02 37 views
0

當我選擇花費最多的前10位客戶時,我需要一個顯示1到10的臨時列。Oracle 11g中的行號編號

這裏是我的查詢:

SELECT * 
FROM (
    SELECT row_number() OVER (ORDER BY c.cust_name) "No.", c.cust_name "Customer Name", SUM(r.payment_amount) "Total Spent" 
    FROM customer c, reservation r 
    WHERE c.cust_id = r.cust_id 
    GROUP BY c.cust_name 
    ORDER BY 3 DESC 
) 
WHERE ROWNUM <= 10; 

但查詢會給我的輸出是這樣的:

 No. Customer Name     Total Spent 
---------- ------------------------------ ----------- 
     112 Romola Bice       7095 
     15 Beck Boxhill       6600 
     123 Taite Tradewell      6600 
     108 Port Risdall       6600 
     105 Paxon Rendell       6600 
     33 Daphne Stilwell      6600 
     57 Gretel Davidsen      6200 
     95 Mylo Bengoechea      6200 
     78 Kare Goodayle       6200 
     65 Hilton McCluney      6200 

這就是我想要的:

 No. Customer Name     Total Spent 
---------- ------------------------------ ----------- 
     1 Romola Bice       7095 
     2 Beck Boxhill       6600 
     3 Taite Tradewell      6600 
     4 Port Risdall       6600 
     5 Paxon Rendell       6600 
     6 Daphne Stilwell      6600 
     7 Gretel Davidsen      6200 
     8 Mylo Bengoechea      6200 
     9 Kare Goodayle       6200 
     10 Hilton McCluney      6200 

我當更換row_number() OVER (ORDER BY c.cust_name)rownum,給我錯誤:ORA-00979: not a GROUP BY expression

有什麼方法可以實現我想要的輸出嗎?

任何幫助表示讚賞。

+0

谷歌爲 「前N位查詢」。這是你正在尋找的。 在這種情況下,您不需要row_numbe函數。 –

回答

1

嘗試在選擇rownum第一選擇:

SELECT ROWNUM "No.", Customer Name, Total Spent 
    FROM (
     SELECT row_number() OVER (ORDER BY c.cust_name) "No.", c.cust_name "Customer Name", SUM(r.payment_amount) "Total Spent" 
     FROM customer c, reservation r 
     WHERE c.cust_id = r.cust_id 
     GROUP BY c.cust_name 
     ORDER BY 3 DESC 
) 
    WHERE ROWNUM <= 10; 
+0

非常感謝!有一些缺少雙引號。 客戶名稱 - >「客戶名稱」 總共花費 - >「總花費」 – Coolwei