Добавление дополнительной группы по скользящей средней - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть текущий код, который работает

select format_date('%Y%m', date) as yyyymm,
       (sum(sum(val)) over (order by min(date)) / 
        sum(count(*)) over (order by min(date))
       ) as running_avg
from t
group by yyyymm
order by yyyymm;

Возвращает

yyyymm  Score
201712  25.57931742
201801  24.69794466
201802  24.23110781
201803  23.85651947
201804  23.66164799
201805  23.43029053
201806  23.17074628
201807  23.09766588
201808  23.08902284

Я сейчас пытаюсь добавить дополнительную группу по предложению для отдела. Запрос выполняется, однако результаты неточны, кто-нибудь может распознать, что я делаю неправильно?

select format_date('%Y%m', date) as yyyymm, department
       (sum(sum(val)) over (order by min(date)) / 
        sum(count(*)) over (order by min(date))
       ) as running_avg
from t
group by yyyymm, department
order by yyyymm;

Возвращает

yyyymm  department  Score
201712  HR  6.704365079
201712  F&B 8.550338502
201712  Marketing   8.550338502
201712  I.T.    9.857502908
201712  Security    9.551491994
201712  Contractors 9.411654456
201712  Executive Office    9.637075283
201712  Property Services   9.45905826
201712  Corporate   9.57458477
201712  Legal   9.700320268

1 Ответ

0 голосов
/ 04 сентября 2018

Вам необходимо добавить department к partition by:

select department, format_date('%Y%m', date) as yyyymm,
       (sum(sum(val)) over (partition by department order by min(date)) / 
        sum(count(*)) over (partition by department order by min(date))
       ) as running_avg
from t
group by yyyymm, department
order by department, yyyymm;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...