我有一位同事正在使用“金额”列工作。 他们希望在同一查询中获得前5个金额和金额总和。
我知道你可以这样做:
SELECT TOP 5 amount FROM table
UNION SELECT SUM(amount) FROM table
ORDER BY amount DESC
但这会产生如下结果:
1000 (sum)
100
70
50
30
20
他们真正需要的是:
100 | 1000
70 | 1000
50 | 1000
30 | 1000
20 | 1000
我实现此目的的直观尝试往往会遇到分组问题,当您选择不同的列时这不是问题,但是当您想要根据您选择的列使用聚合函数时。 / p>
答案 0 :(得分:6)
您可以使用CROSS JOIN:
SELECT TOP 5 a.amount, b.sum
FROM table a
CROSS JOIN (SELECT SUM(amount) sum FROM table) b
ORDER BY amount DESC
答案 1 :(得分:2)
这可能有效
SELECT TOP 5 amount, (SELECT SUM(amount) FROM table)
FROM table
ORDER BY amount DESC
答案 2 :(得分:1)
不是很漂亮,但应该这样做:
SELECT TOP 5 amount, SAmount
FROM table Join
(SELECT SUM(amount) As SAmount FROM table)
ORDER BY amount DESC
正如其他人所说,我可能会使用两个查询。
答案 3 :(得分:1)
使用分析函数的另一种方法(SQL Server 2005+
):
SELECT TOP 5 amount, SUM(amount) OVER()
FROM table
ORDER BY
amount DESC