抓取前 5 行并合并其余 SQL Server

auw*_*688 2 sql sql-server group-by sql-order-by

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

SELECT groupName, SUM(amount) AS theAmountSpent
FROM purchases
GROUP BY groupName
ORDER BY theAmountSpent DESC
Run Code Online (Sandbox Code Playgroud)

这一组并订购它们,但我不知道如何然后抓住剩余的组将它们组合起来。任何帮助,将不胜感激。

lar*_*sts 5

使用 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
Run Code Online (Sandbox Code Playgroud)