组内排名问题,top n 问题,通常的解法都是窗口函数
1.先 grade 用窗口函数,不同 language_id 分组,根据 score 进行组内排名;
2.将上述组内排好序的表和 language 表进行 inner join,目的是获取 name 字段;
3.在1.2 连接好的表中,select 出相应字段,条件是 ranking<=2,以及题目给定的排序条件
select a.id
,b.name
,a.score
from (select *
,dense_rank() over (partition by language_id order by score desc) as ranking
from grade) a
inner join language b
on a.language_id=b.id
where a.ranking<=2
order by b.name,a.score desc,a.id
京公网安备 11010502036488号