Суммирование значений по условиям, вычисляемым по выборке значений

Автор Роман, ноября 16, 2015, 02:34:50 pm

« предыдущая - следующая »

Роман

Всем доброго времени суток!

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

Суть - есть выборка значений. Из нее необходимо найти среднее (avg), стандартное отклонение (stdev), после чего суммировать все значения выборки по следующему правилу:

- если значение выборки менее avg-3*stdev - в сумму идет avg-3*stdev;
- если значение выборки находится в промежутке от avg-3*stdev до avg+3*stdev - в сумму идет само значение;
- если значение выборки превышает avg+3*stdev - в сумму идет avg+3*stdev;

То есть сумма с "урезанием" по нормальному коридору.

Суммирование провожу по клиенту и коду материала, за период (месяц) может быть не одна продажа (пример данных и моделька - приложены). 

Среднее по паре клиент-товар считает "на  Ура!", стандартное отклонение и границы интервала/коридора - тоже. А вот если попытаться подставить границы интервала в условие суммирования - неудача: Клик сообщает об ошибке. Спецификатор total убирает сообщение об ошибке, но не решает исходную задачу (так как в этом случае "не видит" границ коридора по паре клиент/SKU). То есть если выбрать (в Selection) одного клиента и один товар, то все считается корректно, нужно же таблицу из всех клиентов и всех SKU. ))

Заранее благодарен за идеи.

С уважением,
Роман.

bibis

добрый день. Почитайте про функцию aggr , и думаю всё станет понятно. Если что распишу подробнее позже.

Роман

Про aggr читал. Про функцию и аналог группировки в SQL по GROUP BY знаю. И пример из распространенного документа с вычислением топов свыше 80% и не топов ниже 50% тоже видел.

Только в примере max и проценты по генеральной совокупности считаются (и условия со спецификатором total), а мне нужно решить задачу для каждой строки в таблице на уровне клиент/материал, где в общем случае не зафиксированы какие-либо множества значений клиента и материала.