118 документов
← К списку

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

страница

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

Предложение СГРУППИРОВАТЬ ПО <Поля группировки> позволяет описать порядок группировки результатов запроса.

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

Сами агрегатные функции указываются в списке полей выборки; в предложении СГРУППИРОВАТЬ ПО <Поля группировки> необходимо указать список полей, по которым следует произвести группировку. В запросе будут группироваться записи исходных таблиц, содержащие одинаковые значения указанных полей.

В предложении можно использовать логические выражения.

Список полей группировки содержит ссылки на поля исходных таблиц – источников запроса, указанные через запятую:

**СГРУППИРОВАТЬ ПО <Поля группировки>

     

|

 

<Разыменование поля> [, <Разыменование поля> [, …]]**

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

При использовании агрегатных функций предложение СГРУППИРОВАТЬ ПО может быть и не указано совсем; при этом все результаты запроса будут сгруппированы в одну единственную строку.

Пример:

// Требуется получить статистику по продаже товаров:
// максимальную, минимальную и среднюю цены в расходных накладных.

ВЫБРАТЬ
   Накладная.Номенклатура,
   СРЕДНЕЕ (Накладная.Цена) КАК Среднее,
   МАКСИМУМ (Накладная.Цена) КАК Максимум,
   МИНИМУМ (Накладная.Цена) КАК Минимум

ИЗ
   Документ.РасходнаяНакладная.Состав КАК Накладная

СГРУППИРОВАТЬ ПО
   Накладная.Номенклатура

Результат запроса:

Номенклатура

Среднее

 Максимум

 Минимум

 Брюки детские

1 500 

1 500 

1 500 

 Рубашка "Ковбойка"

800 

800 

800 

 Джинсы женские

1 520 

1 700 

1 500 

 Свитер детский

800 

800 

800 

 Раковина "Лилия"

2 250 

2 500 

2 000 

 Мойдодыр "Аквариум"

3 166 

4 000 

2 000 

 Смеситель "Ультра"

1 500 

1 500 

1 500 

 Кухонный комбайн Крупс

1 500 

1 500 

1 500 

СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ (Группировка по нескольким группам)

Для таблиц верхнего уровня поддерживается конструкция СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ, предназначенная для группировки по нескольким группам за одно сканирование таблицы.
Конструкция СГРУППИРОВАТЬ ВСЕ ПО ГРУППИРУЮЩИМ НАБОРАМ эквивалентна конструкции ОБЪЕДИНИТЬ ВСЕ с запросами с СГРУППИРОВАТЬ ПО для указанных групп. Поля списка выборки, не попадающие в текущую группу, заменяются на NULL.

СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ ((НаборПолейГруппировки1)[, (НаборПолейГруппировки2)[,...]])

Важно! Использование данной конструкции не поддерживается для вложенных таблиц.

Не допускается использование в списке выборки выражений с двуми и более полями, которые соответствуют двум и более группировкам.

При указании СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ в предложении УПОРЯДОЧИТЬ ПО можно использовать только выражения из списка выборки.

Не равносильны операторы:

СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ ((РегистрСведенийШтатноеРасписание.Отдел, РегистрСведенийШтатноеРасписание.Должность));

и

СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ (РегистрСведенийШтатноеРасписание.Отдел, РегистрСведенийШтатноеРасписание.Должность);

Пример:

ВЫБРАТЬ
ТоварныеЗапасыОстатки.Номенклатура КАК Номенклатура,
ТоварныеЗапасыОстатки.Склад КАК Склад,
СУММА(ТоварныеЗапасыОстатки.КоличествоОстаток) КАК КоличествоОстаток
ИЗ
РегистрНакопления.ТоварныеЗапасы.Остатки КАК ТоварныеЗапасыОстатки
СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ
(
(ТоварныеЗапасыОстатки.Склад),
(ТоварныеЗапасыОстатки.Номенклатура),
(ТоварныеЗапасыОстатки.Номенклатура, ТоварныеЗапасыОстатки.Склад)

Результат запроса будет включать в себя результаты всех трех запросов (или одного объединенного запроса). Таким образом, речь идет не о другом способе получения результатов. Речь, в первую очередь, идет о повышении скорости получения результата и производительности.