Ответ
Оператор HAVING используется для фильтрации результатов агрегации, сгруппированных оператором GROUP BY. В отличие от WHERE, который фильтрует строки до группировки, HAVING применяется после неё и может использовать агрегатные функции.
Пример: Выбрать отделы с более чем 5 сотрудниками.
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
Ключевые отличия от WHERE:
- Порядок выполнения:
WHERE→GROUP BY→HAVING. - Контекст:
HAVINGработает с агрегированными значениями (результатамиCOUNT,SUM,AVG), аWHERE— с отдельными строками таблицы. - Совместное использование: Их можно комбинировать в одном запросе.
Пример с WHERE и HAVING: Найти среднюю зарплату по отделам для сотрудников, нанятых после 2020 года, где средняя зарплата превышает 50 000.
SELECT department, AVG(salary) as avg_salary
FROM employees
WHERE hire_date > '2020-01-01'
GROUP BY department
HAVING AVG(salary) > 50000;