Найти лучшего ученика по каждому предмету
Есть таблица с оценками учеников:
Grades
student_id - идентификатор ученика subject_id - идентификатор предмета grade - оценка ученика по предмету
Написать запрос, который для каждого предмета возвращает идентификатор лучшего ученика.
Лучшее до чего додумался - как найти топ оценку для каждого предмета, но как пририсовать туда имена студентов недопёр.
(SELECT subject_id , MAX( grade)
FROM grades
GROUP BY subject_id);
Финальный ответ должен выглядеть примерно так

Ответы (1 шт):
Автор решения: GlebV
→ Ссылка
Попробуйте с функцией RANK(), она всем ученикам с наивысшей оценкой по предмету даст ранг 1:
WITH cte AS (
SELECT student_id, subject_id, grade,
RANK() OVER (PARTITION BY subject_id ORDER BY grade DESC) best
FROM grades
)
SELECT *
FROM cte
WHERE best = 1;
PS Запрос не проверял, потому что в вопросе нет примера данных в текстовом виде.
