Ответ
HAVING — это предложение SQL, используемое для фильтрации групп строк, созданных оператором GROUP BY. Оно применяется после группировки, в отличие от WHERE, который фильтрует строки до группировки. HAVING позволяет использовать агрегатные функции (COUNT, SUM, AVG, MAX, MIN) в условии фильтрации.
Пример использования:
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
Этот запрос вернёт только те отделы (department), в которых количество сотрудников больше 5.
Ключевые отличия HAVING от WHERE:
- Время применения:
WHEREфильтрует отдельные записи перед группировкой,HAVINGфильтрует уже сформированные группы. - Использование агрегатных функций: В
WHEREнельзя использовать агрегатные функции, а вHAVING— можно. - Порядок в запросе:
HAVINGвсегда указывается послеGROUP BY(если он есть).
Практическое применение в тестировании: При проверке отчётов или сводных данных важно валидировать, что агрегированные значения (например, общие суммы, средние показатели, количество записей в группах) соответствуют бизнес-правилам. HAVING помогает написать запросы для поиска групп, нарушающих эти правила (например, "найти пользователей, совершивших менее 2 заказов", "выявить товарные категории со средней ценой выше X").