2017-08-02 41 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