SELECT id, name, score FROM ( SELECT g.id, l.name, score, DENSE_RANK() OVER (PARTITION BY l.name ORDER BY score DESC) AS ranking FROM grade g JOIN language l ON l.id = g.language_id ) AS t WHERE ranking <= 2 ORDER BY name, score DESC, id;