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