Для чего используется оператор 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и который не обёрнут в агрегатную функцию.