select grade.id,name,score
from grade
left join `language` on `language`.id = grade.language_id
WHERE score >= (
    select max(g1.score)
    from grade g1
    where (g1.score <> (
        SELECT MAX(score)
        from grade g2
        WHERE g2.language_id = g1.language_id
        group by g2.language_id
    ) OR (
        SELECT COUNT(score)
        from grade g2
        WHERE g2.language_id = g1.language_id
        group by g2.language_id
    ) = 1)
    and g1.language_id = grade.language_id
    group by g1.language_id
)
ORDER by name asc,score desc