Чтобы ответить на ваши вопросы - в обратном порядке:
2 - DISTINCT
необходимо, поскольку учащийся может посещать урок дважды, например, если он провалил его в первый раз.
1 - Когда вы группируете по class
, вы подсчитываете все значения поля, которые имеют одинаковое значение class
. Если вы COUNT(DISTINCT class)
, то это число будет равно 1 (поскольку только 1 класс имеет такое же значение class
). Таким образом, вам нужно посчитать student
значения вместо этого, чтобы найти число student
значений с этим конкретным class
значением.
Обратите внимание, что подзапрос не нужен, тест COUNT
может быть расположен в HAVING
предложение:
SELECT class
FROM courses
GROUP BY class
HAVING COUNT(DISTINCT student) >= 5
Демонстрация по SQLFiddle