Агрегатные функции в запросе
3 мин
В языке запросов 1С:Предприятие 8 предусмотрено использование агрегатных функций. Эти функции необходимы, в случаях когда нам нужно вычислить какое-то одиночное значение из набора значений. К примеру, у нас есть некоторый набор чисел (3, 1, 4, 5), с помощью агрегатных функций мы можем их просуммировать, получив число 13, или вычислить минимум - число 1. Все из них имеют аналогичный синтаксис и используются похожим образом.
Сумма
СУММА(ИмяПоля) – суммирует значения колонки (поля). Следует помнить, что суммировать можно только числовые поля. Если поле имеет составной тип данных, содержит не только числовые значения, то функция может быть применена, но в случае появления в выборке нечислового поля, выполнение запроса закончится с ошибкой.
Пример, вычислим общее количество товаров находящееся во всех документах "Поступление товаров и услуг":
ВЫБРАТЬ
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК ОбщееКоличествоТоваров,
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
Минимум
МИНИМУМ(ИмяПоля) – вычисляет минимальное значение колонки (поля).
Максимум
МАКСИМУМ(ИмяПоля) – вычисляет максимальное значение колонки (поля).
Среднее
СРЕДНЕЕ(ИмяПоля) – вычисляет среднее значение колонки (поля).
Следует помнить, что у каждого типа данных есть свои правила сравнения. Подробнее можно прочитать в статье о правилах сравнения значений.
Количество
КОЛИЧЕСТВО(ИмяПоля) – подсчитывает количество значений колонки
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ИмяПоля) - подсчитывает количество уникальных значений колонки
Примеры
Если в выборке присутствуют только поля к которым применяется агрегатная функция, то применение выглядит следующим образом:
ВЫБРАТЬ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПоступлениеТоваровУслугТовары.Номенклатура) КАК КоличествоРазличныхНоменклатур,
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК ОбщееКоличествоТоваров,
МИНИМУМ(ПоступлениеТоваровУслугТовары.Сумма) КАК МинимальнаяСуммаПокупки
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
Если в выборке пристутствуют поля не использующие агрегатные функции, они обязательно должны быть указаны в секции СГРУППИРОВАТЬ ПО:
ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Номенклатура,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения)
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугТовары.Номенклатура
В таком случае поля указанные в секции СГРУППИРОВАТЬ будут использованы в качестве разрезов группировки. И значения агрегатных функций будут рассчитаны в разрезе этих группировок.
К примеру есть следующий набор данных:
Номенклатура | Количество |
---|---|
Яблоко | 1 |
Яблоко | 3 |
Апельсин | 2 |
Апельсин | 4 |
Мы используем агрегатную функцию Сумма на колонке "Количество", чтобы вычислить общее количество товаров
ВЫБРАТЬ
ТаблицаТоваров.Номенклатура,
СУММА(ТаблицаТоваров.Количество) КАК Количество
ИЗ
ТаблицаТоваров КАК ТаблицаТоваров
СГРУППИРОВАТЬ ПО
ТаблицаТоваров.Номенклатура
Так как поле "Номенклатура" так же присутствует в полях выборки мы обязаны указать его в секции группировки.
В результате мы получим следующий набор данных:
Номенклатура | Количество |
---|---|
Яблоко | 4 |
Апельсин | 6 |
Повторяющиеся значения номенклатуры превратились в одну, а их количества просуммировались.
В случае если же мы хотим узнать общее количество номенклатуры для всего набора данных, мы можем использовать секцию "Итоги". Подробнее читайте в соотвествующей статье Секция запроса Итоги По.
Стоит отметить, что перечисленные функции также могут использоваться и с оператором ВЫБОР.
Пример, зададим условие на количество товаров, и определим значения поля, если условия выполняются:
ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА СУММА(Товары.Количество) > 5
ТОГДА "Нормально"
ИНАЧЕ "Слишком мало"
КОНЕЦ КАК ОценкаПокупок
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
СГРУППИРОВАТЬ ПО
Товары.Номенклатура
Результатом может быть такая таблица:
Номенклатура | ОценкаПокупок |
Апельсины | Слишком мало |
Яблоки | Слишком мало |
Клубника | Слишком мало |
Салфетки | Нормально |
Фруктовый сок | Слишком мало |
Фруктово-ореховая смесь | Нормально |
Задачи на эту тему:
- Задача 49. Использование агрегатных функций и объединений
- Задача 42. Использование объединений и агрегатных функций в запросах
- Задача 29. Применение сложных соединений, использование временных таблиц
- Задача 45. Использование агрегатных функций
- Задача 39. Использование объединений и агрегатных функций в запросах
- Задача 22. Применение агрегатных функций
- Задача № 10. Определить общее количество ингредиентов для каждой продукции с отбором
- Задача 30. Применение сложных соединений, использование временных таблиц
- Задача № 11. Определить продукцию, у которой нет ингредиентов
- Задача 41. Использование объединений и агрегатных функций в запросах
- Задача 19. Применение агрегатных функций
- Задача 38. Использование объединений и агрегатных функций в запросах
- Задача № 39. Вывести предпоследнюю закупочную цену для товара «Сыр маскорпоне»
- Задача № 29. Вывести себестоимость и розничную цену для всей номенклатуры с видом номенклатуры «Полуфабрикат»
- Задача № 34. Вывести итоговую себестоимость для товара «Торт Прага»
- Задача 23. Применение агрегатных функций
- Задача № 40. Вывести предпоследнюю закупочную цену и текущую закупочную цену для товара «Сыр маскорпоне»
- Задача 20. Применение агрегатных функций.
- Задача 46. Использование агрегатных функций
- Задача 48. Использование агрегатных функций
- Задача № 35. Вывести себестоимость, розничную цену и наценку для товара "Торт Прага"
- Задача № 42. Вывести процент изменения розничной цены по отношению к предпоследней цене
- Задача 18. Применение агрегатных функций
- Задача 32. Применение агрегатных функций
- Задача 72. Применение агрегатных функций
- Задача 31. Применение агрегатных функций
- Задача 24. Применение агрегатных функций и отборов
- Задача 37. Использование объединений и агрегатных функций в запросах
- Задача 21. Применение агрегатных функций
- Задача 25. Применение агрегатных функций с отборами
- Задача 33. Применение агрегатных функций
- Задача 34. Применение агрегатных функций
- Задача 43. Использование объединений и агрегатных функций в запросах
- Задача 26. Применение условий для агрегатных функций
- Задача 50. Использование агрегатных функций и объединений
- Задача 40. Использование объединений и агрегатных функций в запросах
- Задача № 27. Вывести себестоимость для всей номенклатуры с видом номенклатуры «Готовая продукция»
- Задача № 28. Вывести себестоимость и розничную цену для всей номенклатуры.
- Задача № 14. Определить общий вес каждой продукции. Вес рассчитать по ингредиентам, входящих в состав продукции с отбором по виду продукции
- Задача № 18. Определить общий вес ингредиента - «Пшеничная мука» нужный для производства продукции по всем рецептурам, где он используется.
- Задача № 15. Определить общий вес каждой продукции. Вес рассчитывать по ингредиентам, входящих в состав продукции с отбором виду продукции и с учетом коэффициента пересчета.
- Задача 27. Поиск дублей
- Задача 47. Использование агрегатных функций
- Задача № 19. Применение агрегатных функций по определенному условию к элементам из нескольких табличных частей.*
- Задача № 17. Определить суммарный общий вес каждого ингредиента, рассчитанный по составу продукции.
- Задача № 13. Определить вес каждой продукции по ингредиентам, входящих в ее состав. Применение агрегатных функций
- Задача № 36. Вывести итоговую себестоимость, розничные цены и наценку для всех товаров с видом «Готовая продукция».
- Задача 28. Поиск дублей по набору условий
- Задача № 38. Вывести список номенклатуры с видом номенклатуры «Готовая продукция» и наценкой на товары менее 30% (включительно)
- Задача № 21. Применение агрегатных функций к элементам табличных частей по определенному условию
- Задача № 3. Статистика записей по видам номенклатур
бикукле
про "Имеющие()" ничего не написано хотя в задаче 26 указано
eldarmingaliev
бикукле, Спасибо! Дополним