← Все вопросы
Чем WHERE отличается от HAVING в SQL?
19
Постоянно путаю. Вроде оба фильтруют строки. Когда писать WHERE, а когда HAVING? Объясните на простом примере с таблицей orders.
3 ответа
31
✓ Принятый ответ — помог автору
Коротко: WHERE фильтрует строки ДО группировки, HAVING — после, уже по агрегатам.
WHERE работает с обычными столбцами и не видит COUNT(), SUM() и т.п. Если нужно отфильтровать по результату агрегата — это HAVING.
SELECT user_id, COUNT(*) AS cnt
FROM orders
WHERE status = 'paid' -- сначала отбросили неоплаченные строки
GROUP BY user_id
HAVING COUNT(*) >= 3; -- потом оставили только тех, у кого 3+ заказа
Правило: условие по отдельной строке — WHERE; условие по группе/агрегату — HAVING.
Boris Britva а можно в HAVING писать обычный столбец? — можно, если он в GROUP BY, но смысла обычно нет · 8 месяцев назад
Вячеслав Леонтьев вот это «до и после группировки» наконец уложилось, спасибо 🙏 · 8 месяцев назад
8
WHERE — по строкам, HAVING — по группам.
-6
Они вообще взаимозаменяемые, пиши что хочешь.
Andrew France нет, это неверно: WHERE не умеет в агрегаты, COUNT(*) в нём не напишешь · 8 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.