← Назад ко всем вопросам

В чем разница между HAVING и WHERE

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

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

WHERE:

WHERE применяется для фильтрации строк на этапе выборки данных из таблицы. Это означает, что условие WHERE проверяется для каждой строки до того, как данные будут сгруппированы или агрегированы. WHERE не может использовать агрегатные функции, такие как SUM, AVG, COUNT, потому что на момент выполнения WHERE агрегатные функции еще не применены.

Пример:

SELECT * 
FROM employees 
WHERE salary > 50000;

В этом примере выбираются все строки из таблицы employees, где значение salary больше 50000. Фильтрация происходит до любой группировки или агрегирования.

HAVING:

HAVING используется для фильтрации данных после того, как они были сгруппированы с помощью GROUP BY. Это позволяет применять условия к агрегатным функциям. HAVING может использовать агрегатные функции, потому что он применяется после выполнения этих функций.

Пример:

SELECT department, COUNT(*) AS num_employees 
FROM employees 
GROUP BY department 
HAVING COUNT(*) > 10;

В этом примере сначала данные группируются по department, затем для каждой группы подсчитывается количество сотрудников. HAVING фильтрует группы, оставляя только те, где количество сотрудников больше 10.

Зачем это нужно и где применяется:

  • WHERE используется для фильтрации данных на уровне строк, что позволяет уменьшить объем данных, обрабатываемых в последующих этапах запроса.
  • HAVING позволяет фильтровать данные на уровне групп, что полезно для анализа агрегированных данных, например, для получения статистики по группам.

Как это работает:

  1. WHERE:

    • Выполняется на этапе выборки данных.
    • Применяется к каждой строке.
    • Не поддерживает агрегатные функции.
  2. HAVING:

    • Выполняется после группировки данных.
    • Применяется к каждой группе.
    • Поддерживает агрегатные функции.

Таким образом, выбор между WHERE и HAVING зависит от того, на каком этапе выполнения запроса необходимо применить фильтрацию: до или после группировки данных.

Тема: SQL и базы данных
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки