MAX的总和(TOP x)

Ada*_*dam 4 t-sql sql-server

假设我有一个如下表:

PK Code Value
1  A    200
2  A    300
3  A    25
4  A    75
5  A    50
6  A    15
7  A    300
8  A    75
Run Code Online (Sandbox Code Playgroud)

如何获得代码= A的前4个最高值的值(即只想要300 + 300 + 200 + 75的总和)

谢谢

Mar*_*ith 11

您可以使用派生表或公用表表达式来获得前4个SUM.

SELECT SUM(Value) As Top4Sum
FROM
(
    SELECT TOP (4) Value
    FROM YourTable
    WHERE Code = 'A'
    ORDER BY Value DESC
) T
Run Code Online (Sandbox Code Playgroud)

如果您想要SUMTOP 4每一个Code你可以做

;WITH CTE
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY Code ORDER BY Value DESC) RN
         FROM   YourTable)
SELECT Code,
       SUM(Value)
FROM   CTE
WHERE  RN <= 4
GROUP  BY Code  
Run Code Online (Sandbox Code Playgroud)