# Команда 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`
←→
↑