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