작성
·
232
0
with temp_01
as (
select d.category_name,
to_char(date_trunc('month', a.order_date), 'yyyymm') as month_day,
sum(amount) as sum_amount,
count(distinct a.order_id) as monthly_ord_cnt
from orders a
join order_items b on a.order_id = b.order_id
join products c on b.product_id = c.product_id
join categories d on c.category_id = d.category_id
group by d.category_name, to_char(date_trunc('month', a.order_date), 'yyyymm')
)
select *,
sum(sum_amount) over (partition by month_day order by month_day) as temp1,
sum(sum_amount) over (partition by month_day) as temp2,
sum_amount / sum(sum_amount) over (partition by month_day) as ratio
from temp_01
집계 어날리틱 함수는 order by를 사용하면 파티션 내에서 누적합이 되는것으로 알고 있었는데 왜 이렇게 나올까요...? 제가 혹시 놓친게 있는 걸까요
답변 1
1
analytic 사용시 partition by month_day order by month_day와 같이 partition by와 orderby의 컬럼이 모두 month_day로 같습니다. month_day로 partition이 되면 동일한 month_day가 모이게 되는데, 이 동일한 month_day에서 다시 order by month_day는 모두 동일한 month_day이기 때문에 총합이 나오게 됩니다(즉 ordering 순서가 다 동일합니다)
아래와 같이 다른 컬럼으로 order by를 수행하면 누적합이 됩니다.
sum(sum_amount) over (partition by month_day order by sum_amount) as temp1,
partition 절과 order by 절에 같은 컬럼을 대상으로 한다면 해당 파티션의 총합이 된다고 생각하면 무리가 없을까요?