select g.id ,name ,score from ( select * ,dense_rank() over(partition by language_id order by score desc) t_rank from grade ) g join language l on g.language_id=l.id where g.t_rank<=2 order by name,score desc,g.id
思路:利用窗口函数把名次求出来,然后用子查询得到的表去连接 language 表,接下来就是按条件写了。注意使用可重复的 dense_rank() 函数。如 1,1,2