Выражение GROUP BY
Выражение GROUP BY определяет, какие столбцы должны использоваться для группировки при выполнении любых агрегаций в выражении SELECT. Если указано условие GROUP BY, запрос всегда является агрегированным, даже если в условии SELECT нет явно заданного агрегирования.
Если указано условие GROUP BY, все кортежи, имеющие совпадающие данные в группирующих столбцах (т. е. все кортежи, принадлежащие одной группе), будут объединены. Значения самих группирующих столбцов не изменяются, а любые другие столбцы могут быть объединены с помощью агрегатной функции (например, count, sum, avg, и т. д.).
GROUP BY ALL
Используйте GROUP BY ALL для группировки всех столбцов в выражении SELECT, которые не обернуты в агрегатные функции. Это упрощает синтаксис, позволяя хранить список столбцов в одном месте, и предотвращает ошибки, сохраняя гранулярность SELECT в соответствии с гранулярностью GROUP BY (например, предотвращает дублирование).
Синтаксис
Могут использоваться следующие варианты синтаксиса:
SELECT ...
FROM ...
[ ... ]
GROUP BY groupItem [ , groupItem [ , ... ] ]
[ ... ]
SELECT ...
FROM ...
[ ... ]
GROUP BY ALL
[ ... ]
где:
groupItem ::= { <column_alias> | <position> | <expression> }
Параметры
-
<column_alias>
Псевдоним столбца, заданный в выраженииSELECT.
-
<position>
Позиция выражения в выраженииSELECT.
-
<expression>
Любое выражение, заданное на таблицах в текущей области видимости.
-
GROUP BY ALL
Указывает, что все элементы в выраженииSELECT, которые не используют агрегатные функции, должны использоваться для группировки.
Примеры
-
Вычислим количество записей в таблице
employees(работников), относящихся к каждому отделу:SELECT department, count(*) FROM employees GROUP BY department; -
Вычислим среднюю зарплату для каждого отдела каждого подразделения:
SELECT division, department, avg(salary) FROM employees GROUP BY division, department; -
Сгруппируем данные по отделам и подразделениям, чтобы увидеть все уникальные пары "отдел — подразделение":
SELECT division, department FROM employees GROUP BY ALL;