Деление двух агрегатов в оконной функции
Существует таблица с полями:
ГРУППА УРОВЕНЬ 1, ГРУППА УРОВЕНЬ 2, ГРУППА УРОВЕНЬ 3,
ФАКТ_ПОКАЗАТЕЛЬ, ПЛАН_ПОКАЗАТЕЛЬ, ДАТА
Нужно посчитать за отрезок времени отношение накопленных фактических показателей к накопленным плановым показателям по группам уровня 3.
Создал запрос:
SELECT
ГРУППА_УРОВЕНЬ_1,
ГРУППА_УРОВЕНЬ_2,
ГРУППА_УРОВЕНЬ_3,
SUM(ФАКТ_ПОКАЗАТЕЛЬ)/SUM(ПЛАН_ПОКАЗАТЕЛЬ) OVER(
PARTITION BY ГРУППА_УРОВЕНЬ_3) KPI_ГРУПП_3
FROM ТАБЛИЦА
WHERE ДАТА BETWEEN X AND Y AND... AND... AND...
Получаю ошибку о неприменимости двух агрегатов в оконной функции.
Ответы (1 шт):
Автор решения: Mike
→ Ссылка
Предложение OVER применяется к строго одной оконной функции, а не к выражению из нескольких функций. Таким образом первый SUM() у вас не имеет своего OVER и считается групповой, а не оконной функции и требует указания GROUP BY. Должно быть так:
SELECT
ГРУППА_УРОВЕНЬ_1,
ГРУППА_УРОВЕНЬ_2,
ГРУППА_УРОВЕНЬ_3,
SUM(ФАКТ_ПОКАЗАТЕЛЬ) OVER(PARTITION BY ГРУППА_УРОВЕНЬ_3) /
SUM(ПЛАН_ПОКАЗАТЕЛЬ) OVER(PARTITION BY ГРУППА_УРОВЕНЬ_3) KPI_ГРУПП_3
FROM ТАБЛИЦА
WHERE ДАТА BETWEEN X AND Y AND... AND... AND...