Этот запрос будет делать то, что вы хотите:
SELECT s.student_name, COUNT(DISTINCT r.class_id) AS num_classes
FROM student s
LEFT JOIN rosters r ON r.student_id = s.student_id
GROUP BY s.student_id
HAVING num_classes >= 2
Он подсчитывает все различные значения class_id
в roster
для каждого учащегося (num_classes
) и возвращает только учеников с 2 или более (HAVING num_classes >= 2
).
Примечание. Я использовал LEFT JOIN
, чтобы поймать всех учеников, однако, поскольку вы хотите, чтобы только те, у кого более 1 класса, в этом нет необходимости, и вы можете использовать прямую JOIN
.
Также обратите внимание, что JOIN
таблица class
для этого вопроса не обязательна, однако, если вы хотите указать названия классов, которые посещал студент, вам потребуется.