本题使用窗口函数会很方便
思路如下:
1.首先利用窗口函数获取每一种语言下的成绩排名(注:这里要用dense_rank而不是rank
ps:dense_rank与rank()用法相当,但是有一个区别:dense_rank在处理相同的等级时,等级的数值不会跳过。rank则跳过。 比如rank是 1224 dense_rank 会输出1223)

(select id,language_id,score,dense_rank() over(partition by language_id
order by score desc) r from grade ) g

该语句获得 每个语言id下的成绩排名
2.接下来只需要从language表中获取语言名 并且限定排名前二 在使用name排序即可

select g.id,l.name,g.score from
(select id,language_id,score,dense_rank() over(partition by language_id
order by score desc) r from grade ) g ,language l
where g.language_id = l.id and g.r<3
order by l.name