Ответ
Оператор GROUP BY в SQL используется для агрегации строк в группы по одинаковым значениям одного или нескольких столбцов и последующего применения агрегатных функций (COUNT, SUM, AVG, MAX, MIN) к каждой группе.
Базовый синтаксис и пример:
SELECT
department_id,
COUNT(*) AS employee_count,
AVG(salary) AS avg_salary
FROM employees
WHERE hire_date > '2020-01-01' -- Фильтрация ДО группировки
GROUP BY department_id
HAVING COUNT(*) > 5 -- Фильтрация ПОСЛЕ группировки
ORDER BY avg_salary DESC;
Ключевые аспекты:
-
Группировка по нескольким полям
SELECT department_id, job_title, COUNT(*) FROM employees GROUP BY department_id, job_title; -- Уникальные комбинации -
Фильтрация: WHERE vs HAVING
WHEREфильтрует отдельные строки до группировки.HAVINGфильтрует целые группы после группировки.
-
Ограничение SELECT В блоке
SELECTсGROUP BYможно указывать только:- Столбцы, перечисленные в
GROUP BY. - Агрегатные функции от любых столбцов.
- Столбцы, перечисленные в
Распространённые сценарии использования:
- Аналитика и отчёты: подсчёт количества заказов по дням, средний чек по категориям товаров.
- Агрегация логов: группировка ошибок по типу за последний час.
- Построение сводных данных: сумма продаж по регионам и менеджерам.
Производительность:
- Группировка часто требует сортировки или хэширования, что может быть ресурсоёмким на больших таблицах.
- Индексы по полям, используемым в
GROUP BY, могут значительно ускорить выполнение.
Итог: GROUP BY — фундаментальный оператор для преобразования детальных данных в агрегированные сводки, необходимые для анализа и отчётности.