Статья Автор: Деникина Н.В., Деникин А.В.

Использование GROUP BY для агрегирования данных.

GROUP BY — это ключевое слово в SQL, которое позволяет группировать строки таблицы по значениям определённого столбца или нескольких столбцов. В сочетании с агрегатными функциями (COUNT, SUM, AVG, MIN, MAX) оно позволяет выполнять расчёты и анализировать данные в разрезе определённых категорий, например, по отделам, возрастам, годам и т.д.

Синтаксис GROUP BY

Общий синтаксис команды с использованием GROUP BY:

SELECT столбец1, столбец2, ... , агрегатная_функция(столбецN) 
FROM имя_таблицы 
WHERE условие 
GROUP BY столбец1, столбец2, ... ; 
  • GROUP BY столбец1 — указывает столбец, по которому производится группировка. Каждое уникальное значение в этом столбце становится отдельной группой.
  • Агрегатная функция (например, SUM, COUNT) вычисляется по каждому уникальному значению в столбце.

Пример работы GROUP BY

Рассмотрим таблицу сотрудников employees:

employee_id name department age salary email
1 Alice Sales 28 3500 [email protected]
2 Bob IT 32 5000 [email protected]
3 Charlie Marketing 45 4500 NULL
4 Diana Sales 25 3000 [email protected]
5 Ethan IT 41 5200 [email protected]

Задача 1: Подсчитать количество сотрудников в каждом отделе

Мы хотим узнать, сколько сотрудников работает в каждом отделе. Для этого используем GROUP BY вместе с COUNT:

SELECT department, COUNT(employee_id) AS num_employees 
FROM employees 
GROUP BY department; 

Результат:

department num_employees
Sales 2
IT 2
Marketing 1

Этот запрос сгруппировал сотрудников по их отделам, а затем подсчитал количество сотрудников в каждом отделе.

Задача 2: Средняя зарплата по каждому отделу

Используем AVG для расчета средней зарплаты в каждом отделе:

SELECT department, AVG(salary) AS avg_salary 
FROM employees 
GROUP BY department; 

Результат:

department avg_salary
Sales 3250
IT 5100
Marketing 4500

Использование GROUP BY с несколькими столбцами

Можно сгруппировать данные по нескольким столбцам. Например, если нам нужно узнать среднюю зарплату для каждого отдела и возраста, можно добавить оба столбца в GROUP BY.

SELECT department, age, AVG(salary) AS avg_salary 
FROM employees 
GROUP BY department, age; 

Этот запрос создаст группы по сочетанию значений в столбцах department и age, вычисляя среднюю зарплату в каждом сочетании.

Использование GROUP BY с HAVING

HAVING позволяет фильтровать группы после выполнения группировки. Это похоже на WHERE, но HAVING применяется к сгруппированным результатам.

Пример: Вывести отделы с количеством сотрудников больше одного

Для этого используем COUNT с GROUP BY и фильтруем группы с помощью HAVING:

SELECT department, COUNT(employee_id) AS num_employees 
FROM employees 
GROUP BY department 
HAVING num_employees > 1; 

Результат:

department num_employees
Sales 2
IT 2

Только отделы с количеством сотрудников больше одного прошли фильтр HAVING.

Итоги

  • GROUP BY позволяет разбить данные на группы по уникальным значениям в одном или нескольких столбцах.
  • После группировки можно использовать агрегатные функции для расчётов по каждой группе.
  • HAVING применяется для фильтрации уже сгруппированных данных и работает аналогично WHERE, но с агрегатными функциями.

Примеры использования

Вот несколько задач, которые помогают освоить GROUP BY:

  1. Подсчитать общее количество сотрудников в каждом отделе.
  2. Найти максимальную зарплату для каждого отдела.
  3. Подсчитать количество сотрудников с возрастом старше 30 лет в каждом отделе.
  4. Найти минимальную зарплату среди сотрудников в каждом отделе, у которых email не указан.

GROUP BY — важный инструмент для работы с агрегированными данными и их анализом по категориям, таким как отдел, возраст или должность.

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать