Команда GROUP BY позволяет группировать результаты при выборке из базы данных.
К сгруппированным результатам можно применять любые функции (смотрите примеры).
См. также команду HAVING, которая позволяет накладывать условие на группы, созданные с помощью GROUP BY.
Синтаксис
SELECT * FROM имя_таблицы WHERE условие GROUP BY поле_для_группировки
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
---|---|---|---|
1 | Дима | 23 | 100 |
2 | Петя | 23 | 200 |
3 | Вася | 23 | 300 |
4 | Коля | 24 | 1000 |
5 | Иван | 24 | 2000 |
6 | Кирилл | 25 | 1000 |
Пример
В данном примере записи группируются по возрасту (будет 3 группы - 23 года, 24 года и 25 лет). Затем для каждой группы применяется функция SUM, которая суммирует зарплаты внутри данной группы.
В результате для каждой из групп (23 года, 24 года и 25 лет) будет подсчитана суммарная зарплата внутри этой группы:
SELECT age, SUM(salary) as sum FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
sum сумма |
---|---|
23 | 600 |
24 | 3000 |
25 | 1000 |
Пример
В данном примере мы используем дополнительное условие WHERE, чтобы взять не все записи из таблицы:
SELECT age, SUM(salary) as sum FROM workers WHERE id>=2 GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
sum сумма |
---|---|
23 | 500 |
24 | 3000 |
25 | 1000 |
Пример
В данном примере записи группируются по возрасту (будет 3 группы - 23 года, 24 года и 25 лет). Затем для каждой группы применяется функция MAX, которая находит максимальную зарплату внутри данной группы:
SELECT age, MAX(salary) as max FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
max максимальная зарплата |
---|---|
23 | 300 |
24 | 2000 |
25 | 1000 |
Пример
А теперь с помощью функции MIN найдется минимальная зарплата внутри данной группы:
SELECT age, MIN(salary) as min FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
min минимальная зарплата |
---|---|
23 | 100 |
24 | 1000 |
25 | 1000 |
Пример
А теперь с помощью функции COUNT найдется количество записей в группе:
SELECT age, COUNT(*) as count FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
count количество |
---|---|
23 | 3 |
24 | 2 |
25 | 1 |