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