select t2.id, t2.name, t2.score from (select t1.id, t1.name, t1.score, dense_rank() over(partition by t1.name order by t1.score desc) as score_rank from (select g.id, l.name, g.score from grade g left join language l on g.language_id=l.id) t1) t2 where t2.score_rank<=2 order by t2.name,t2.score desc,t2.id;