本体思路较为清晰,窗口函数+表连接

需要注意的是从所给例子的查询结果看,窗口函数需采用并列排序(dense_rank)的方法,具体步骤如下:

select t1.id,t2.name,t1.score from
(select *,dense_rank()over(partition by language_id order by score desc) as rk
from grade) t1   #   注意!!排序时,partition by 和 order by的位置不能随意变换,否则会出错。
left join language t2 
on t1.language_id = t2.id
where t1.rk = 1 or t1.rk = 2
order by t2.name,t1.score desc