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