Данный механизм запроса служит для расчета показателей по выбранным группировочным полям.
Например, для решения задач: определить сумму всех продаж контрагента за период, максимальный или средний чек.
Основной синтаксис:
ВЫБРАТЬ <ГруппировочныеПоля>, <СУММА(<РасчетноеПоле>)>
ИЗ <Источник>
СГРУППИРОВАТЬ ПО
<ГруппировочныеПоля>
Получается, что в директиве СГРУППИРОВАТЬ ПО, дублируются все поля из ВЫБРАТЬ, кроме тех по которым производится расчет. При добавлении поля в конструкторе это производится автоматически, если руками отслеживаейте самостоятельно, иначе будет ошибка: «Поле не входит в группу».
Замечу, что примитивные значения (число,дата,строка) или реквизиты уже присутствующих в группировке ссылок добалвять не обязательно.
Также могут вообще отсутствовать агрегатные функции, тогда запрос будет работать как-будто используется ВЫБРАТЬ РАЗЛИЧНЫЕ.
//Данный запрос получит количество уникальных номенклатур проходивших по каждому складу в системе
ВЫБРАТЬ
ОстаткиТМЦ.Склад,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОстаткиТМЦ.Номенклатура) КАК Номенклатура,
1,
ДАТАВРЕМЯ(2017,1,12),
ОстаткиТМЦ.Склад.Наименование
ИЗ
РегистрНакопления.ОстаткиТМЦ КАК ОстаткиТМЦ
СГРУППИРОВАТЬ ПО
ОстаткиТМЦ.Склад
Функции группировки (агрегатные)
- СУММА (<Поле>)
- КОЛИЧЕСТВО(<Поле>)
- КОЛИЧЕСТВО (РАЗЛИЧНЫЕ <Поле>)
- МАКСИМУМ (<Поле>)
- МИНИМУМ (<Поле>)
- СРЕДНЕЕ(<Поле>)
Другие возможности группировки
Допускается использование математических операторов над функциями группировки (+,*,/,-), а также конструкция ВЫБОР и поверх агрегата и внутри (в зависимости от потребностей)
ВЫБРАТЬ
ОстаткиТМЦОбороты.Номенклатура,
СУММА(ОстаткиТМЦОбороты.СуммаОборот) КАК СуммаОборот,
СУММА(ОстаткиТМЦОбороты.КоличествоОборот) КАК КоличествоОборот,
ВЫБОР
КОГДА СУММА(ОстаткиТМЦОбороты.КоличествоОборот) = 0
ТОГДА 0
ИНАЧЕ СУММА(ОстаткиТМЦОбороты.СуммаОборот) / СУММА(ОстаткиТМЦОбороты.КоличествоОборот)
КОНЕЦ КАК СредняяЦена
ИЗ
РегистрНакопления.ОстаткиТМЦ.Обороты КАК ОстаткиТМЦОбороты
СГРУППИРОВАТЬ ПО
ОстаткиТМЦОбороты.Номенклатура
Пример запроса без функций:
ВЫБРАТЬ
ОстаткиТМЦОбороты.Номенклатура
ИЗ
РегистрНакопления.ОстаткиТМЦ.Обороты КАК ОстаткиТМЦОбороты
СГРУППИРОВАТЬ ПО
ОстаткиТМЦОбороты.Номенклатура
Можно использовать агрегаты над соединяемыми таблицами, но рекомендуется поверх использовать функцию ЕстьNULL
ВЫБРАТЬ
СпрНоменклатура.Ссылка,
ЕСТЬNULL(СУММА(ОстаткиТМЦОбороты.СуммаОборот), 0) КАК Сумма
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТМЦ.Обороты КАК ОстаткиТМЦОбороты
ПО (ОстаткиТМЦОбороты.Номенклатура = СпрНоменклатура.Ссылка)
СГРУППИРОВАТЬ ПО
ОстаткиТМЦОбороты.Номенклатура,
СпрНоменклатура.Ссылка
Группировка в конструкторе запроса
Производится на одноименной вкладке.
- Из доступных полей выбираются групповые поля, а также суммируемые поля (для каждого них выбирается функция суммирования).
- В середине есть кнопки добавления, либо возможно перетаскивание мышью
- Конструктор обычно сам выбирает функцию (обязательно проверяйте его действия)
Люди глупо доверчивы… Вся реклама мира основана на трех принципах: «Хорошо, много и даром». Поэтому можно давать скверно, мало и дорого.