Предложение СГРУППИРОВАТЬ ПО / GROUP BY

Очень часто запрос делается с целью не просто выбрать записи из таблицы, но также сгруппировать их определенным образом. Под словом «сгруппировать» имеется в виду не распределить записи по группам, а свернуть по группировочным полям, вычислив агрегатные функции по каждой группе. Например, если требуется узнать объем продаж каждого товара за период, тогда в запросе понадобится группировка по товару. Ниже приведен запрос с группировкой к документам РасходнаяНакладная:

 

ВЫБРАТЬ Номенклатура, СУММА(Сумма) КАК ОбъемПродаж
ИЗ Документ.РасходнаяНакладная.Состав КАК ДокСостав
ГДЕ ДокСостав.Ссылка.Дата МЕЖДУ ЬНачДата И &КонДата
СГРУППИРОВАТЬ ПО Номенклатура
АВТОУПОРЯДОЧИВАНИЕ

 

В данном примере использована агрегатная функция СУММА для поля Сумма табличной части Состав. Запрос группирует все продажи по товарам и подсчитывает объем продаж по каждому товару:

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

 

ВЫБРАТЬ
	Подразделение,
	СУММА(Оклад) КАК ФондОплатыТруда
	МИНИМУМ(Оклад) КАК МинОклад,
	МАКСИМУМ(Оклад) КАК МаксОклад,
	СРЕДНЕЕ(Оклад) КАК СреднийОклад,
	КОЛИЧЕСТВО(*) КАК КоличествоЧеловек
ИЗ Справочник.Сотрудники
СГРУППИРОВАТЬ ПО Подразделение

 

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

 

ВЫБРАТЬ Номенклатура,
	ДокСостав.Ссылка.Контрагент КАК Контрагент,
	СУММА(Сумма) КАК Продажи
ИЗ Документ.РасходнаяНакладная.Состав КАК ДокСостав
ГДЕ ДокСостав.Ссылка.Дата МЕЖДУ ШачДата И &КонДата
СГРУППИРОВАТЬ ПО Номенклатура, Контрагент
АВТОУПОРЯДОЧИВАНИЕ

Изготовим печати срочно. Штампы, изготовление печатей, срочные штампы.