Gymterview
junior

Для чего используется оператор HAVING?

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

Пример
-- Найти отделы, где средняя зарплата превышает 100 000
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 100000;

Логический порядок: сначала WHERE фильтрует строки, затем GROUP BY группирует, затем HAVING фильтрует уже сформированные группы. Таким образом, HAVING — это WHERE для групп.

На собеседовании: ключевое — HAVING фильтрует группы после агрегации, а WHERE — строки до агрегации. Частая ошибка — использовать HAVING без GROUP BY для простой фильтрации (это работает, но неэффективно).