Расчет среднего в запросе
В этой статьи я хочу показать способ исключения нулевых значений при вычислении среднего арифметического в итогах запроса. Среднего арифметическое в итогах запроса является суммой всех значений, деленной на их количество по формуле:.
- x – среднее арифметическое;
- xn – конкретное значение;
- n – количество значений.
Однако, бывают случаи, когда нужно исключить нулевые значения из вычисления среднего арифметического. Для этого нужно возвращать значение Null вместо нулевого значения. Платформа 1С исключает значения в расчете среднего и при этом ошибка в запрсе не возникает.
Например, допустим есть таблица товаров, которая имеет два значения цены : 10 и 0 . Среднее арифметическое будет 5, однако если мы хотим, чтобы было 10 нужно исключить значение 0 из рассмотрения. Такой результат продемонстрирует следующий простой фрагмент текста запроса
Запрос.Текст = "ВЫБРАТЬ
| Товары.Товар КАК Товар,
| ВЫБОР
| КОГДА Товары.Цена = 0
| ТОГДА NULL
| ИНАЧЕ Товары.Цена
| КОНЕЦ КАК Цена
|ИЗ
| Товары КАК Товары
|ИТОГИ
| СРЕДНЕЕ(Цена)
|ПО
| Товар";
Все нулевые значения исключаются при расчете СРЕДНЕЕ(Цена) влагодаря конструкции в области выбранных полей запроса:
ВЫБОР КОГДА Товары.Цена = 0 ТОГДА NULL ИНАЧЕ Товары.Цена КОНЕЦ
На практике данный случай имеет место, когда в запросе строится левое соединение двух таблиц. Следедуюшая конструкция в области выбранных полей запроса :
ЕстьNull( ПраваяТаблица.Цена, 0)
выключает несущестуючих записей правой таблицы в качестве нулевого значения при вычислении среднего . Следовательно, если мы хотим, чтобы эти неуществующие не участвовали при вычислении среднего нельзя использовать оператор ЕстьNull