select g1.id,l.name,g1.score from( select g.*,dense_rank()over(partition by language_id order by score desc)as s_n from grade g ) g1,language l where g1.language_id=l.id and g1.s_n<3 order by l.name asc,g1.score desc,g1.id asc