sql - 捕获前 5 行并组合其余的 SQL Server

标签 sql sql-server group-by sql-order-by

我有一列用于组名和一列用于花费的金额。 我需要根据组名对金额进行汇总,然后获取最高的五个。在那之后,我需要将其余的组合到它自己的组中,加上他们花费的总金额。这就是我现在拥有的

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/

相关文章:

python - 如何过滤属于超过 1 个成员的组的所有行?

mysql - group by 无法正确连接两个表

java - hibernate 中有没有办法检索快速非阻塞行计数?

sql - 将 SQL 中的日期范围分解为单独的 bool 日行

python - 许多模块都需要连接到 Azure SQL DB - 如何连接?

java - 如何找到一个月中的第一个和最后一个日期

c# - 具有相同表的多个模式的 EF6 中的 Multi-Tenancy

sql-server - SQL Server 2005 中的波斯数字

sql - 预部署脚本不包含在发布脚本中

Python 列表分组依据