select
a.id
,a.name
,a.score
from (
select
g.id
,l.name
,g.score
,dense_rank() over(partition by l.name order by g.score desc) r
from grade g
join language l
on g.language_id = l.id
) a
where a.r <= 2