Добавить в корзинуПозвонить
Найти в Дзене

Sql отличие where от having

В SQL, WHERE и HAVING используются для фильтрации данных, но они применяются к разным этапам обработки запроса и имеют разные цели. Основное отличие заключается в том, что WHERE фильтрует строки До группировки (до применения агрегатных функций), а HAVING фильтрует После группировки (после применения агрегатных функций). WHERE: Назначение: Фильтрует отдельные строки в таблице, До применения каких-либо агрегатных функций или группировки. Применение: Используется для указания условий, которые должны выполняться для каждой строки, чтобы она была включена в результат запроса. Ограничения: Не может использоваться с агрегатными функциями (например, SUM, AVG, COUNT, MIN, MAX). Пример: SELECT product_name, price FROM products WHERE price > 100; — Выбирает только те товары, цена которых больше 100 В этом примере WHERE price > 100 фильтрует строки в таблице products до того, как какие-либо агрегатные функции будут применены. Выбираются только те строки, где цена товара больше 100. HAVING: Назначе

В SQL, WHERE и HAVING используются для фильтрации данных, но они применяются к разным этапам обработки запроса и имеют разные цели. Основное отличие заключается в том, что WHERE фильтрует строки До группировки (до применения агрегатных функций), а HAVING фильтрует После группировки (после применения агрегатных функций).

WHERE:

Назначение: Фильтрует отдельные строки в таблице, До применения каких-либо агрегатных функций или группировки.

Применение: Используется для указания условий, которые должны выполняться для каждой строки, чтобы она была включена в результат запроса.

Ограничения: Не может использоваться с агрегатными функциями (например, SUM, AVG, COUNT, MIN, MAX).

Пример:

SELECT product_name, price

FROM products

WHERE price > 100; — Выбирает только те товары, цена которых больше 100

В этом примере WHERE price > 100 фильтрует строки в таблице products до того, как какие-либо агрегатные функции будут применены. Выбираются только те строки, где цена товара больше 100.

HAVING:

Назначение: Фильтрует группы строк, созданные оператором GROUP BY, После применения агрегатных функций.

Применение: Используется для указания условий, которые должны выполняться для каждой группы строк, чтобы она была включена в результат запроса.

Ограничения: Может использоваться только с агрегатными функциями или столбцами, указанными в предложении GROUP BY.

Пример:

SELECT category, COUNT(*) AS num_products

FROM products

GROUP BY category

HAVING COUNT(*) > 5; — Выбирает только те категории, в которых больше 5 товаров

В этом примере:

GROUP BY category группирует строки в таблице products по категориям.

COUNT(*) AS num_products подсчитывает количество товаров в каждой категории и присваивает результат столбцу num_products.

HAVING COUNT(*) > 5 фильтрует Группы, созданные GROUP BY, выбирая только те категории, в которых количество товаров (num_products) больше 5.

Сводная таблица:

Характеристика

WHERE

HAVING

Фильтрация

Отдельные строки До группировки

Группы строк После группировки и применения агрегатных функций

Группировка

Не связано с GROUP BY

Требует наличия GROUP BY

Агрегатные функции

Не может использоваться с агрегатными функциями

Может использоваться только с агрегатными функциями или столбцами из GROUP BY

Применение

Фильтрация данных на уровне отдельных строк

Фильтрация агрегированных данных на уровне групп строк

Простыми словами:

WHERE: Вы отбираете яблоки из корзины по признаку (например, только красные), прежде чем начать их считать.

HAVING: Вы считаете количество яблок каждого сорта в корзине, а потом выбираете только те сорта, которых больше определенного количества.

Пример использования WHERE и HAVING вместе:

SELECT category, AVG(price) AS avg_price

FROM products

WHERE in_stock = 1 — Отбираем только товары, которые есть в наличии

GROUP BY category

HAVING AVG(price) > 50; — Выбираем категории, где средняя цена товаров в наличии больше 50

В этом примере:

WHERE in_stock = 1 фильтрует строки, выбирая только товары, которые есть в наличии.

GROUP BY category группирует отобранные товары по категориям.

AVG(price) AS avg_price вычисляет среднюю цену товаров в каждой категории.

HAVING AVG(price) > 50 фильтрует группы, выбирая только те категории, где средняя цена товаров в наличии больше 50.

В заключение:

WHERE и HAVING — это мощные инструменты для фильтрации данных в SQL, но важно понимать их различия и правильно использовать их в запросах. WHERE фильтрует строки до группировки, а HAVING фильтрует группы после группировки и применения агрегатных функций.

  📷
📷