Gymterview
junior

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

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

Пример
-- Количество сотрудников и средняя зарплата по отделам
SELECT department, COUNT(*) AS emp_count, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

После GROUP BY в SELECT можно указывать только столбцы, перечисленные в GROUP BY, и агрегатные функции. Попытка добавить другой столбец (например, name) приведёт к ошибке, потому что для группы из нескольких строк неизвестно, какое именно имя выбрать. PostgreSQL строго следит за этим правилом, в то время как MySQL в режиме ONLY_FULL_GROUP_BY=OFF может допустить такие запросы, возвращая произвольное значение из группы.

На собеседовании: важно объяснить ограничение на столбцы в SELECT при использовании GROUP BY. Частая ошибка — добавить в SELECT столбец, которого нет в GROUP BY и который не обёрнут в агрегатную функцию.