我有一个我无法工作的表的查询.
以下是表格示例;
表成员:
|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)
提前致谢
您可以使用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)