我有一列用于组名和一列用于花费的金额。 我需要根据组名对金额进行汇总,然后获取最高的五个。在那之后,我需要将其余的组合到它自己的组中,加上他们花费的总金额。这就是我现在拥有的
SELECT groupName, SUM(amount) AS theAmountSpent
FROM purchases
GROUP BY groupName
ORDER BY theAmountSpent DESC
这对它们进行分组和排序,但我不知道如何捕获剩余的组来组合它们。任何帮助将不胜感激。
最佳答案
使用 row_number() 的备用 CTE 方法(SQL Server 2005+):
WITH cte AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SUM(amount)) DESC) AS num,
groupName, SUM(amount) AS theAmountSpent
FROM purchases
GROUP BY groupName
)
SELECT groupName, theAmountSpent FROM cte WHERE num BETWEEN 1 AND 5 --top 5
UNION ALL
SELECT 'Sum rest', SUM(theAmountSpent) FROM cte WHERE num > 5 -- sum of rest
关于sql - 捕获前 5 行并组合其余的 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728212/