简单的SQL选择相同列的和和值

Mat*_*ell 0 sql sql-server

我有一个同事在一个有"数量"列的桌子上工作.他们希望在同一查询中获得前5个金额和金额总和.

我知道你可以这样做:

SELECT TOP 5 amount FROM table 
UNION SELECT SUM(amount) FROM table
ORDER BY amount DESC
Run Code Online (Sandbox Code Playgroud)

但这会产生如下结果:

1000  (sum)
 100
  70
  50
  30
  20
Run Code Online (Sandbox Code Playgroud)

他们真正需要的是:

100 | 1000
 70 | 1000
 50 | 1000
 30 | 1000
 20 | 1000
Run Code Online (Sandbox Code Playgroud)

我实现这一目标的直观尝试往往会遇到分组问题,当您选择不同的列时,这不是一个问题,而是当您想要根据您选择的列使用聚合函数时.

小智 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
Run Code Online (Sandbox Code Playgroud)