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
。
有什么方法可以实现我想要的输出吗?
任何帮助表示赞赏。
谷歌为 “前N位查询”。这是你正在寻找的。 在这种情况下,您不需要row_numbe函数。 –