看完题目和输出图片中观察到排名的情况刚好和dense_rank一致,即可以使用窗口函数;

select *,dense_rank()over(partition by language_id order by score desc)as rs
from grade)c
left join language as l
on c.language_id = l.id

查询出成绩表格中的成绩排名后将对应的语言名名称左连接;

select c.id,l.name,c.score
from(
select *,dense_rank()over(partition by language_id order by score desc)as rs
from grade)c
left join language as l
on c.language_id = l.id
where rs<=2
order by l.name,c.score desc,c.id

最终结果,在查询成绩排名中抽取排名小于等于2的排名,并根据题目要求排序即可;