В чем разница между HAVING и GROUP BY

«В чем разница между HAVING и GROUP BY» — вопрос из категории SQL, который задают на 33% собеседований Системный Аналитик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GROUP BY группирует строки по указанным столбцам, а HAVING фильтрует уже сгруппированные результаты (аналог WHERE, но для агрегатных функций).

Пример:

-- Группировка по department_id с фильтрацией по средней зарплате
SELECT department_id, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 50000;

Ключевые отличия:

  1. GROUP BY выполняется до HAVING.
  2. WHERE фильтрует строки до группировки, HAVING — после.
  3. В HAVING можно использовать агрегатные функции (SUM, AVG и т.д.), в WHERE — нет.