select id,name,score from( select g.id as id,name,score,dense_rank()over(partition by language_id order by score desc) as rk from grade g inner join language l on g.language_id=l.id) as t where rk=1 or rk=2 order by name,score desc,id