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

Виртуальная таблица
Виртуальная таблица применяется для обращения к итогам и автоматической свертки по нужным полям.
Например:
можно получить все итоги регистра (итоги по всем измерениям и ресурсам),
Код 1C v 8.х
итоги по контрагенту и ресурсу Сумма
Код 1C v 8.х
итоги в разрезе контрагентов и товаров по двум ресурсам
Код 1C v 8.х

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

Сгруппировать по
Конструкция — сгруппировать по аналогично методу Свернуть для таблицы значений и слову Группировка в языке запросов 7.7. При применении этой конструкции в результате запроса остаются только группировочные записи. Это ключевое слово обычно применяется совместно с агрегатными функциями в списке полей выборки.
Код 1C v 8.х

Код 1C v 8.х
Итоги применяются для построения отчетов, сводной таблицы или сводной диаграммы. Для двух последних использование ИТОГОВ обязательно!
При применении этой конструкции в результате запроса остаются детальные записи И итоговые записи (напоминает Сгруппировать По). При этом агрегатные функции перечисляются в предложении ИТОГИ, а не в списке полей ВЫБРАТЬ.
Код 1C v 8.х

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

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

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

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

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

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

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

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

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

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

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

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

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

рубрики: Запросы | Дата: 4 Ноябрь, 2016

В этой статье рассмотрим группировку в запросах 1С 8 и
агрегатные функции с помощью которых эта группировка и делается.

Проще всего объяснить, что такое группировка, на примере.
Допустим, что у нас есть таблица с количеством товаров на складах:

Склад Товар Количество
Центральный Карандаш 45
Центральный Ручка 30
Офис Карандаш 15
Офис Ручка 25

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

Товар Количество
Карандаш 60
Ручка 55

Здесь то нам и поможет группировка.

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

А теперь поместим нашу исходную таблицу во временную и выберем из нее данные с
группировкой по полю Товар

Жирным выделен код, который непосредственно учавствует в группировке.
СУММА() – это агрегатная функция.
СГРУППИРОВАТЬ ПО – это оператор после которого идет список
полей через запятую по которым производится группировка. По сути здесь должны быть
перечислены все поля из раздела ВЫБРАТЬ за исключением тех к которым
применены агрегатные функции. В противном случае выполнение запроса завершится с
ошибкой.

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

СУММА() – суммирует значения поля;
МИНИМУМ() – выбирает из всех значений поля минимальное;
МАКСИМУМ() – выбирает из всех значений поля максимальное;
СРЕДНЕЕ() – рассчитывает среднее значение (Сумма/Количество);
КОЛИЧЕСТВО() – выводит количество записей;
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ) – выводит количество записей у которых различаются значения;
Продемонстрируем их работу на нашем примере. Добавим в наш запрос другие агрегатные
функции кроме СУММЫ.

В результате выполнения запроса получим следующую таблицу:

Товар Сумма Минимум Максимум Среднее
Карандаш 60 15 45 30
Ручка 55 25 30 27,5

В предыдущем запросе не были использованы КОЛИЧЕСТВО() и
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ). Сделаем еще один запрос:

После выполнения получаем:

Количество КоличествоРазличные
4 2

Здесь мы в поле Количество получили общее количество записей в таблице,
а в поле КоличествоРазличные – количество записей, у которых в поле
Товар значения различаются. Применительно к нашей таблице это Карандаш
и Ручка.

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

Оцените статью
Добавить комментарий