GROUP BY группирует строки по значению одного или нескольких столбцов, а HAVING фильтрует уже сформированные группы. Обычно GROUP BY используют вместе с агрегатными функциями, чтобы получить итоги по каждой группе.
GROUP BY группирует строки по значению одного или нескольких столбцов, а HAVING фильтрует уже сформированные группы. Обычно GROUP BY используют вместе с агрегатными функциями, чтобы получить итоги по каждой группе.
Что делает GROUP BY
GROUP BY собирает строки с одинаковыми значениями в группы. Это полезно, когда нужно посчитать что-то по каждой категории: например, количество заказов по городам или сумму продаж по отделам.
Что делает HAVING
HAVING фильтрует группы после того, как они были созданы. В отличие от WHERE, который работает со строками до группировки, HAVING можно применять к агрегированным значениям.
Пример
SELECT city, COUNT(*)
FROM users
GROUP BY city
HAVING COUNT(*) > 10;Этот запрос сначала группирует пользователей по городу, а потом оставляет только те города, где пользователей больше 10.
Чем GROUP BY отличается от WHERE
WHERE отбирает строки до группировки, а HAVING — группы после группировки. Поэтому если нужно отфильтровать отдельные записи, используют WHERE, а если нужно отфильтровать итоговые группы, используют HAVING.
Как ответить на собеседовании
Я бы объяснил так: GROUP BY нужен, чтобы разбить строки на группы по какому-то полю, а HAVING — чтобы отфильтровать уже получившиеся группы, например по количеству строк или сумме. Важно помнить, что WHERE и HAVING работают на разных этапах запроса.
Оцени свой прогресс