Сгруппируйте Student по speciality, отберите группы через HAVING COUNT(*) > 3 и отсортируйте названия. WHERE не заменяет HAVING для условия по размеру группы.
Выявление часто встречающихся направлений обучения
Сгруппируйте Student по speciality, отберите группы через HAVING COUNT(*) > 3 и отсортируйте названия. WHERE не заменяет HAVING для условия по размеру группы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В базе данных имеется таблица Student, в которой хранятся данные о студентах: имя (name), направление обучения (speciality) и дата рождения (d_o_b). Требуется составить SQL‑запрос, который вернёт только те направления, которые указаны у более чем трёх студентов. В результате должны отображаться названия таких направлений, упорядоченные по алфавиту.
Ответ
Сгруппируйте Student по speciality, отберите группы через HAVING COUNT(*) > 3 и отсортируйте названия. WHERE не заменяет HAVING для условия по размеру группы.
SELECT speciality
FROM Student
WHERE speciality IS NOT NULL
GROUP BY speciality
HAVING COUNT(*) > 3
ORDER BY speciality;
NULL исключён как отсутствие названия направления. COUNT(*) считает студентов, а не уникальные имена; одинаковые name не означают одного человека. Алфавитный порядок определяется collation базы, поэтому при специальном языковом требовании его нужно задать явно.