Команда HAVING

Команда HAVING позволяет фильтровать результат группировки, сделанной с помощью команды GROUP BY.

Синтаксис

GROUP BY поле HAVING условие

Таблицы для примеров

таблица employees
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