Команда HAVING
позволяет фильтровать
результат группировки, сделанной с помощью
команды GROUP
BY.
Синтаксис
GROUP BY поле HAVING условие
Таблицы для примеров
id айди |
name имя |
age возраст |
salary зарплата |
---|---|---|---|
1 | user1 | 23 | 400 |
2 | user2 | 25 | 500 |
3 | user3 | 23 | 500 |
4 | user4 | 30 | 900 |
5 | user5 | 27 | 500 |
6 | user6 | 28 | 900 |
Пример
В данном примере демонстрируется работа GROUP BY без условия HAVING при выборке из таблицы:
SELECT age, SUM(salary) as sum FROM employees GROUP BY age
Результат выполнения кода:
age возраст |
sum сумма |
---|---|
23 | 600 |
24 | 3000 |
25 | 900 |
Пример
А теперь с помощью условия HAVING оставим
только те строки, в которых суммарная зарплата
больше или равна 1000
:
SELECT age, SUM(salary) as sum FROM employees GROUP BY age HAVING sum>=1000
Результат выполнения кода:
age возраст |
sum сумма |
---|---|
24 | 3000 |
25 | 900 |
Пример
Подсчитаем с помощью функции COUNT
количество записей в группе (не используя HAVING):
SELECT age, COUNT(*) as count FROM employees GROUP BY age
Результат выполнения кода:
age возраст |
count количество |
---|---|
23 | 3 |
24 | 2 |
25 | 1 |
Пример
А теперь с помощью условия HAVING
оставим только те группы, в которых количество
строк меньше или равно двум:
SELECT age, COUNT(*) as count FROM employees GROUP BY age HAVING count<=2
Результат выполнения кода:
age возраст |
count количество |
---|---|
24 | 2 |
25 | 1 |
Пример
Аналогичного эффекта можно достигнуть, если
воспользоваться командой IN
:
SELECT age, COUNT(*) as count FROM employees GROUP BY age HAVING count IN(1,2)
Пример
Можно также использовать команду BETWEEN
:
SELECT age, COUNT(*) as count FROM employees GROUP BY age HAVING count BETWEEN 1 AND 2