with grade_rank as (
    select 
        *,
        dense_rank() over (partition by language_id order by score desc) as rn
    from 
        grade
)

select 
    g_r.id,
    l.name,
    g_r.score
from 
    grade_rank as g_r
left join 
    language as l
on 
    g_r.language_id = l.id
where 
    g_r.rn <= 2 
order by 
    l.name,
    g_r.score desc,
    g_r.id