В SQL, языке структурированных запросов, WHERE и HAVING - это два ключевых оператора, используемых для фильтрации данных. Они различаются в том, как они применяются к запросам, особенно при использовании агрегатных функций, таких как SUM, COUNT, AVG и других.
Оператор WHERE применяется к строкам до группировки данных с помощью оператора GROUP BY. Он фильтрует строки на основе условий, указанных в предложении WHERE.
Например:
SELECT department, COUNT(*) as employee_count
FROM employees
WHERE salary > 50000
GROUP BY department;
Здесь оператор WHERE применяется до группировки по отделам и фильтрует только те записи, где зарплата превышает 50000.
С другой стороны, оператор HAVING применяется после группировки данных. Он фильтрует результаты группировки на основе условий агрегатных функций.
Например:
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Здесь оператор HAVING применяется после группировки по отделам и фильтрует только те отделы, где средняя зарплата превышает 60000.
Таким образом, основное различие между WHERE и HAVING в SQL заключается в том, что WHERE применяется к строкам данных, а HAVING применяется к результатам группировки данных после применения агрегатных функций.