Деление двух агрегатов в оконной функции

Существует таблица с полями:

ГРУППА УРОВЕНЬ 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...
→ Ссылка