Ответ
Оператор GROUP BY группирует строки результирующего набора данных по одинаковым значениям в одном или нескольких указанных столбцах. Это позволяет применять агрегатные функции (COUNT, SUM, AVG, MAX, MIN) к каждой группе отдельно, а не ко всей таблице.
Базовый пример:
-- Подсчет количества сотрудников в каждом отделе
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;
| Результат: | department_id | employee_count |
|---|---|---|
| 10 | 5 | |
| 20 | 8 | |
| 30 | 3 |
Расширенный пример с несколькими полями и агрегацией:
-- Средняя зарплата и общий фонд оплаты по отделам и должностям
SELECT
department,
job_title,
AVG(salary) AS avg_salary,
SUM(salary) AS total_salary_budget
FROM employees
GROUP BY department, job_title;
Важные правила:
- В блоке
SELECTможно указывать только столбцы изGROUP BYили выражения с агрегатными функциями. - Для фильтрации групп (после агрегации) используется оператор
HAVING, а неWHERE.-- Найти отделы с более чем 5 сотрудниками SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY department_id HAVING COUNT(*) > 5;