SQL - SUM,Distinct和TOP 4

Sen*_*nna 3 sql sql-server

我有一个我无法工作的表的查询.

以下是表格示例;

成员:

|ID|NAME|
|1 |John|
|2 |Joe |
|3 |Paul|
Run Code Online (Sandbox Code Playgroud)

分数:

|ID  |Score |                       
|1   | 25   |                       
|1   | 34   |                       
|2   | 54   |                       
|1   | 23   |                       
|3   | 43   |                     
|2   | 14   |                       
|1   | 23   |                       
|3   | 43   |                     
|3   | 14   |                                             
|3   | 43   |                     
|2   | 14   |                       
|1   | 23   |                       
|3   | 43   |                     
|3   | 14   | 
Run Code Online (Sandbox Code Playgroud)

我想显示成员名称,然后在那里得出最好的2个分数,并首先显示最大的SUM'd分数.

|Paul| 86 |
|Joe | 68 |
|John| 57 |
Run Code Online (Sandbox Code Playgroud)

提前致谢

Oto*_*dze 5

您可以使用row_number窗口函数来获得每个id的TOP 2分数,然后使用它总结group by并最终加入MEMBERS表,例如:

select MEMBERS.name, tt.s from MEMBERS
inner join (
    select  ID, sum(Score) s from (
        select ID, Score, row_number() over(partition by ID order by Score desc) rn from SCORES
    ) t
    where rn <= 2
    group by id
)tt
on MEMBERS.id = tt.id
ORDER BY tt.s
Run Code Online (Sandbox Code Playgroud)