组内排名问题,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