인프런 커뮤니티 질문&답변

정성훈님의 프로필 이미지
정성훈

작성한 질문수

다양한 사례로 익히는 SQL 데이터 분석

월단위 카테고리별 매출액과 주문건수 및 전체매출액 대비 비율 SQL로 구하기

집계 함수 order by

작성

·

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 절에 같은 컬럼을 대상으로 한다면 해당 파티션의 총합이 된다고 생각하면 무리가 없을까요?

정성훈님의 프로필 이미지
정성훈

작성한 질문수

질문하기