我正在尝试制作一个SQL语句,它给出了前X个记录,然后所有其他的总和.第一部分很容易......
select top 3 Department, Sum(sales) as TotalSales
from Sales
group by Department
Run Code Online (Sandbox Code Playgroud)
如果我将第二个查询联合起来,那会更好......
select NOT top 3 "Others" as Department, Sum(sales) as TotalSales
from Sales
group by Department
Run Code Online (Sandbox Code Playgroud)
...对于看起来像的结果集,
Department TotalSales
----------- -----------
Mens Clothes 120.00
Jewelry 113.00
Shoes 98.00
Others 312.00
Run Code Online (Sandbox Code Playgroud)
有没有办法在TOP上做一个等价的NOT运算符?(我知道我可以创建一个顶级X的临时表并使用它,但我更喜欢一个只有一个sql语句的解决方案.)
WITH q AS
(
SELECT ROW_NUMBER() OVER (ORDER BY SUM(sales) DESC) rn,
CASE
WHEN ROW_NUMBER() OVER (ORDER BY SUM(sales) DESC) <= 3 THEN
department
ELSE
'Others'
END AS dept,
SUM(sales) AS sales
FROM sales
GROUP BY
department
)
SELECT dept, SUM(sales)
FROM q
GROUP BY
dept
ORDER BY
MAX(rn)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1910 次 |
| 最近记录: |