@quadabrashell

Чем отличается HAVING от WHERE?

Почему данную выборку нельзя переписать с использованием WHERE?

SELECT StudentId FROM EXAM_RESULT GROUP BY StudentID HAVING MIN(Mark) = 5
  • Вопрос задан
  • 21437 просмотров
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега SQL
Седой и строгий
Из документации:
Основное отличие WHERE от HAVING заключается в том, что WHERE сначала выбирает строки, а затем группирует их и вычисляет агрегатные функции (таким образом, она отбирает строки для вычисления агрегатов), тогда как HAVING отбирает строки групп после группировки и вычисления агрегатных функций. Как следствие, предложение WHERE не должно содержать агрегатных функций; не имеет смысла использовать агрегатные функции для определения строк для вычисления агрегатных функций. Предложение HAVING, напротив, всегда содержит агрегатные функции. (Строго говоря, вы можете написать предложение HAVING, не используя агрегаты, но это редко бывает полезно. То же самое условие может работать более эффективно на стадии WHERE.)
Ответ написан
Комментировать
Maksclub
@Maksclub
maksfedorov.ru
Чтобы понять, что у студента Mark=5 -- минимальный, нужно сгруппировать значения, вдруг не минимальный (помимо проверки -- есть он или нет).
То есть чтобы полностью ваше условие проверить, нужно точно группировать, WHERE просто проверит -- есть такое значение или нет и выведет студентов, у которых есть

WHERE же используется движком на момент выборки, физически не возможно узнать минимальное значение

HAVING же уже работает с агрегирующими функциями, то есть мы сгруппировали, посчитали нужной функцией (минимальное значение в вашем случае), а HAVING уже выдал с условием этого подсчета
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Можно и переписать... но в виде извращенного каскада вложенных селектов:
- внутренний будет вываливать сгруппированные StudentId и MIN(Mark)
- внешний будет селектить StudentId с условие where

)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы