# Команда GROUP BY

Команда GROUP BY позволяет группировать результаты при выборке из базы данных. К сгруппированным результатам можно применять любые функции (смотрите примеры).

## Синтаксис

`SELECT * FROM имя_таблицы WHERE условие GROUP BY поле_для_группировки`

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

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

## Пример

В данном примере записи таблицы группируются по возрасту (будет `3` группы - `23` года, `24` года и `25` лет). Затем для каждой группы применяется функция `SUM`, которая суммирует зарплаты внутри данной группы.

В результате для каждой из групп (23 года, `24` года и `25` лет) будет подсчитана суммарная зарплата внутри этой группы:

`SELECT age, SUM(salary) as sum FROM employees GROUP BY age`

Результат выполнения кода:

age возраст | sum сумма
--- | ---
23 | 600
24 | 3000
25 | 900

## Пример

В данном примере мы используем дополнительное условие `WHERE`, чтобы взять не все записи из таблицы:

`SELECT age, SUM(salary) as sum FROM employees WHERE id>=2 GROUP BY age`

Результат выполнения кода:

age возраст | sum сумма
--- | ---
23 | 500
24 | 3000
25 | 900

## Пример

В данном примере записи группируются по возрасту (будет `3` группы - `23` года, `24` года и `25` лет). Затем для каждой группы применяется функция `MAX`, которая находит максимальную зарплату внутри данной группы:

`SELECT age, MAX(salary) as max FROM employees GROUP BY age`

Результат выполнения кода:

age возраст | max максимальная зарплата
--- | ---
23 | 300
24 | 2000
25 | 900

## Пример

А теперь с помощью функции `MIN` найдется минимальная зарплата внутри данной группы:

`SELECT age, MIN(salary) as min FROM employees GROUP BY age`

Результат выполнения кода:

age возраст | min минимальная зарплата
--- | ---
23 | 100
24 | 900
25 | 900

## Пример

А теперь с помощью функции `COUNT` найдется количество записей в группе:

`SELECT age, COUNT(*) as count FROM employees GROUP BY age`

Результат выполнения кода:

age возраст | count количество
--- | ---
23 | 3
24 | 2
25 | 1

## Смотрите также

- команду `HAVING`,
  которая позволяет накладывать условие на группы

←→
↑