Чем отличается where от having
`WHERE` и `HAVING` используются для фильтрации записей, но они применяются на разных этапах выполнения запроса и имеют разные цели.
WHERE
Применяется до агрегации данных. Это значит, что фильтрация происходит непосредственно на строках исходной таблицы или результата объединения таблиц, до того как произойдет любая операция группировки (`GROUP BY`) или агрегирования (`SUM`, `COUNT`, `AVG` и т.д.).
Используется для фильтрации строк, которые будут включены в результаты группировки или в финальный набор данных, если группировка не используется.
Не может использоваться для фильтрации агрегированных значений.
Пример использования:
SELECT employee_id, SUM(salary)
FROM salaries
WHERE salary > 1000
GROUP BY employee_id;В этом примере он фильтрует строки, где зарплата больше 1000, до того, как произойдет агрегация данных по `employee_id`.
HAVING
Применяется после агрегации данных. Это означает, что фильтрация происходит уже на агрегированных результатах, полученных после применения `GROUP BY` и агрегатных функций.
Используется для фильтрации групп в результате запроса с группировкой.
Может использоваться только с `GROUP
SELECT employee_id, SUM(salary)
FROM salaries
GROUP BY employee_id
HAVING SUM(salary) > 10000;BY` или для фильтрации результатов, полученных с помощью агрегатных функций.
Пример использования:
SELECT employee_id, SUM(salary)
FROM salaries
GROUP BY employee_id
HAVING SUM(salary) > 10000;В этом примере он фильтрует группы, где суммарная зарплата по `employee_id` больше 10000, после того как данные были сгруппированы и агрегированы.
Основные отличия
- Момент применения: `WHERE` применяется до агрегации, `HAVING` — после.
- Цель использования: `WHERE` фильтрует строки, `HAVING` фильтрует группы или агрегированные значения.
- Условия использования: `WHERE` может использоваться в любом запросе, `HAVING` обычно используется с `GROUP BY` или для фильтрации агрегированных значений.
Эти различия делают `WHERE` и `HAVING` специализированными инструментами для разных этапов и целей фильтрации данных.
Feb. 27, 2024, easyoffer
