Ответ
GROUP BY группирует строки с одинаковыми значениями в указанных столбцах, чтобы агрегатные функции (SUM, AVG, COUNT, MAX, MIN) применялись к каждой группе отдельно, а не ко всей таблице как к одному целому.
Почему это необходимо?
Без GROUP BY неагрегированные столбцы в SELECT приводят к неоднозначности или ошибке, так как СУБД не знает, какое значение из группы строк вернуть для этого столбца.
Пример ошибки (без GROUP BY):
-- Этот запрос вызовет ошибку в большинстве СУБД
SELECT department, COUNT(*)
FROM employees;
-- Ошибка: столбец 'department' должен быть в GROUP BY или агрегатной функции.
Корректный пример (с GROUP BY):
-- Подсчет сотрудников в каждом отделе
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;
Ключевые правила:
- Все столбцы в
SELECT, не являющиеся аргументами агрегатных функций, должны быть перечислены вGROUP BY. GROUP BYвыполняется послеWHERE(фильтрации строк) и передHAVING(фильтрации групп) иORDER BY(сортировки результата).