SQL-вопросы на собеседовании аналитика данных
SQL·junior

Чем WHERE отличается от HAVING?

Короткий ответ

WHERE фильтрует строки ДО группировки, HAVING — группы ПОСЛЕ агрегации. Поэтому в WHERE нельзя использовать агрегатные функции, а в HAVING — можно. Если условие не касается агрегатов, его место в WHERE: так база отбросит лишние строки раньше и запрос будет быстрее.

Один из самых частых вопросов на собеседованиях уровня джуниор — и один из самых показательных: по ответу сразу видно, понимает ли кандидат порядок выполнения SQL-запроса или просто заучил синтаксис.

Как рассуждать

Отталкивайся от порядка выполнения запроса: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. WHERE стоит до GROUP BY — на этот момент групп ещё не существует, есть только строки. HAVING стоит после — он видит уже агрегированные группы.

Отсюда всё остальное выводится само: агрегат в WHERE невозможен (нечего агрегировать), а фильтр по «сырой» колонке в HAVING — расточительство (строки зря доехали до группировки).

Эталонный ответ

WHERE фильтрует отдельные строки до группировки, HAVING — группы после агрегации. Пример: посчитать категории фильмов, в которых больше 60 фильмов длиннее 100 минут:

SELECT category, count(*) AS films
FROM film
WHERE length > 100        -- сначала отбрасываем короткие фильмы (строки)
GROUP BY category
HAVING count(*) > 60;     -- затем отбрасываем маленькие группы

Дополнительный балл: упомянуть производительность — условие без агрегатов всегда лучше держать в WHERE, чтобы сократить объём данных до группировки.

Частые ошибки

  • «HAVING — это просто WHERE для GROUP BY» без понимания порядка выполнения: на уточняющем вопросе «а можно count(*) в WHERE?» кандидат плывёт.
  • Фильтр по обычной колонке в HAVING: работает, но выдаёт непонимание, где дешевле фильтровать.
  • Забывают, что в WHERE нельзя ссылаться на алиасы из SELECT (SELECT выполняется позже).

Потренируй этот вопрос с ИИ-интервьюером

Читать разбор полезно, а отвечать вслух под давлением — совсем другое. ИИ-интервьюер задаст этот и смежные вопросы, будет копать глубже и разберёт твои ответы. Первое короткое интервью — бесплатно.

Пройти собеседование бесплатно

Смежные вопросы