分组topN问题,可简单使用窗口函数解决,
这题看输出Java学科的成绩存在并列的情况,所以不能用row_number
得用dense_rank(),我的答案如下:
select id,name,score from( select a.id, b.name, a.score, dense_rank() over (partition by b.name order by a.score desc) as tn from grade a join language b on b.id = a.language_id ) tmp where tmp.tn<=2