Я считаю, что это то, что вы хотите:
select su.student_id, su.course_id, su.grade
from signed_up su
where (su.course_id, su.grade) = (select su2.course_id, su2.grade
from signed_up su2
where su2.student_id = su.student_id
order by su2.grade desc, su2.course_id
);
Получается максимальная оценка для каждого учащегося вместе с курсом с этой оценкой. Если есть дубликаты, выбирается курс с меньшим идентификатором.
Вы можете также сформулировать это как group by
с небольшим количеством взлома:
select su.student_id,
substring_index(group_concat(su.course_id order by grade desc, course_id asc), ',', 1) as course_id,
max(su.grade)
from signed_up su
group by su.student_id;