Группировка записей

Конструкция GROUP BY в команде выборки позволяет разделить записи БД слоя на группы. Группировка записей может выполняться по значениям одного или нескольких полей записей, либо на основании значений столбцов таблицы результатов выборки.

Формат конструкции: GROUP BY <поля данных>|<номера столбцов>. При задании названии полей данных группировка выполняется по полям данных таблицы, если же номера столбцов - то по номерам столбцов выводимой таблицы (нумерация столбцов начинается с 1).

В команде выборки конструкция GROUP BY размещается непосредственно после конструкции WHERE, перед HAVING и ORDER.

Группировка записей всегда используется совместно с агрегирующими функциями. В таком случае агрегирующие функции применяются отдельно к каждой группе записей. Например, при группировке записей слоя Здания по полю Улица, все записи БД слоя будут разбиты на несколько групп, в каждой группе записи с одинаковой улицей. И, при применении функции COUNT в таком запросе, будет выведено количество записей в каждой группе.

Группировка одновременно может выполняться по нескольким полям (столбцам). Поля (столбцы) группировки перечисляются через запятую, после слов GROUP BY. Группировка сначала выполняется по первому полю, затем, уже сгруппированные записи разбиваются на подгруппы по второму полю и т.д.

При использовании в запросе группировки, среди выводимых столбцов выборки могут задаваться агрегирующие функции, и поля записей по которым выполняется группировка, либо выражения включающие эти поля.

Пример группировки записей

Группировка по полю данных

SELECT Улица, COUNT(*) FROM Здания GROUP BY Улица

Выводит список улиц и для каждой улицы количества записей.

Группировка по номеру столбца

SELECT FLOOR(Area/10)*10, SUM(Area) FROM Здания GROUP BY 1

Группирует записи по площади домов (с шагом 10, в первой группе с 0 до 10, во второй с 10 до 20 и т.д.) и выводит список групп площадей суммарную площадь для каждой группы.

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

SELECT COUNT(*) FROM Здания GROUP BY Квартал, Улица

Группирует записи по кварталам, а в кварталах по улицам и выводит количество записей для каждой подгруппы.