Для чего используется оператор GROUP BY в SQL?

«Для чего используется оператор GROUP BY в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оператор 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;

Ключевые аспекты:

  1. Группировка по нескольким полям

    SELECT department_id, job_title, COUNT(*)
    FROM employees
    GROUP BY department_id, job_title; -- Уникальные комбинации
  2. Фильтрация: WHERE vs HAVING

    • WHERE фильтрует отдельные строки до группировки.
    • HAVING фильтрует целые группы после группировки.
  3. Ограничение SELECT В блоке SELECT с GROUP BY можно указывать только:

    • Столбцы, перечисленные в GROUP BY.
    • Агрегатные функции от любых столбцов.

Распространённые сценарии использования:

  • Аналитика и отчёты: подсчёт количества заказов по дням, средний чек по категориям товаров.
  • Агрегация логов: группировка ошибок по типу за последний час.
  • Построение сводных данных: сумма продаж по регионам и менеджерам.

Производительность:

  • Группировка часто требует сортировки или хэширования, что может быть ресурсоёмким на больших таблицах.
  • Индексы по полям, используемым в GROUP BY, могут значительно ускорить выполнение.

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