select id, name, score
from (
    select a.id, name, score,
    dense_rank() over (partition by language_id order by score desc) as rn
    from grade a join language b on a.language_id=b.id
) temp
where rn<=2
order by name, score desc, id