分组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