HAVING в SQL
В предыдущей статье мы разобрали GROUP BY в SQL. Там я написал, что данная конструкция позволяет выбирать отдельные группы и для каждой группы вычислять функции, указанные после SELECT. А HAVING позволяет, согласно результату выполнения функций, отфильтровать лишние строки из групп. Разберём это подробнее.
Вспомним нашу предыдущую задачу, где мы вычисляли среднюю цену на молоко для конкретной сети супермаркетов. Давайте с Вами не просто посмотрим среднюю цену, но и при этом выведем только те сети супермаркетов, где средняя цена ниже 38.
Для этой фильтрации по результатам выполнения агрегатной функции используется в SQL команда HAVING:
SELECT `shop_id`, AVG(`price`) FROM `table` GROUP BY `shop_id` HAVING AVG(`price`) < 38
В результате, вместо 4-х строк у нас будет лишь 3:
shop_id | AVG(`price`) |
1 | 37.5 |
2 | 36.0 |
3 | 37.0 |
Если конструкции GROUP BY не будет, то HAVING будет применяться не к конкретной группе, а ко всей выборке. Это означает, что если условие HAVING будет выполняться, то оно никакого влияния не окажет. А если выполняться не будет, то не будет ни одной результирующей строки.
Используется HAVING в SQL не так часто, как остальные команды, но знать и уметь его использовать крайне желательно.
-
- Михаил Русаков
Комментарии (1):
Можно ещё добавить, что HAVING это как WHERE только используется для GROUP BY
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.