HAVING
HAVING фильтрует группы
WHERE фильтрует отдельные строки до группировки. HAVING применяется уже к результату группировки и позволяет оставить только группы, подходящие по агрегированному условию.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) >= 5;
Сначала заказы объединяются по customer_id, затем для каждой группы считается количество строк, и только группы с пятью или более заказами остаются в результате.
WHERE и HAVING могут работать вместе
SELECT customer_id, SUM(amount) AS total
FROM orders
WHERE status = 'PAID'
GROUP BY customer_id
HAVING SUM(amount) > 10000;
WHERE сначала оставляет только оплаченные заказы. Затем они группируются по клиенту, после чего HAVING оставляет клиентов с суммой оплат больше 10000.
Если условие можно проверить для отдельной строки до группировки, обычно ему место в WHERE.
HAVING нужен прежде всего тогда, когда условие зависит от результата агрегатной функции или от уже сформированной группы.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти