Встречается на собеседованиях • сегодня

В чем различие между where и having

Различие между `WHERE` и `HAVING` заключается в стадии выполнения запроса, на которой применяются эти условия, а также в их предназначении в контексте запросов.

WHERE

  • Применяется для фильтрации строк перед тем, как будет выполнена группировка (`GROUP BY`). Это означает, что условие в `WHERE` используется для исключения строк из результата до того, как будут применены агрегатные функции или операция группировки.
  • Не может использоваться с агрегатными функциями, такими как `COUNT()`, `SUM()`, `AVG()`, потому что в этот момент агрегация ещё не произведена.

HAVING

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

Использование WHERE:

text
```sql
SELECT имя, SUM(зарплата)
FROM сотрудники
WHERE отдел = 'Продажи'
GROUP BY имя;
```

Здесь `WHERE` фильтрует строки, так что в группировку и последующую агрегацию попадают только сотрудники отдела продаж.

Использование HAVING:

text
```sql
SELECT имя, SUM(зарплата)
FROM сотрудники
GROUP BY имя
HAVING SUM(зарплата) > 5000;
```

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

  • Используйте `WHERE`, если нужно отфильтровать строки перед агрегацией или группировкой.
  • Используйте `HAVING`, если нужно отфильтровать группы после применения `GROUP BY` и агрегатных функций.

Это позволяет создавать гибкие и мощные запросы для анализа и отчетности в базах данных.

April 5, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы