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

최윤정님의 프로필 이미지
최윤정

작성한 질문수

데이터 분석 SQL Fundamentals

집계(Aggregate) Analytic SQL 개요와 Sum Analytic SQL의 이해

rows between unbounded preceding and current row 관련 질문

작성

·

434

0

집계 Analytic SQL에서
rows between unbounded preceding and current row 관련 질문 드립니다.

  1. sum(amount) over (partition by order_id order by line_prod_seq) as cum_sum_by_orderid

     

  2. sum(amount) over (partition by order_id rows between unbounded preceding and current row) as cum_sum_by_orderid2

1의 경우와 2의 경우가 값이 같은데

partition이 되어 있고 윈도우 설정이 어차피 상위 row에서 부터 누적되는 값이라면 'order by line_prod_seq'이 없어도 되지 않나 하는 생각이 듭니다.

그럼에도 불구하고 'order by line_prod_seq'을 굳이 명시해줘야 하는 이유가 있을까요? 어떤 데이터의 경우 이 부분이 없으면 문제가 생길 수 있나요?

 

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

sum analytic 을 해주실때는 반드시 order를 설정해 주시는게 좋습니다. 그래야만 window의 방향성을 SQL에서 직관적으로 확인할 수 있기 때문입니다.

말씀하신대로 데이터가 order id 별로 line_prod_seq 순서적으로 생성되면 아래와 같이 작성하여도 running sum 이 만들어 집니다.

sum(amount) over (partition by order_id rows between unbounded preceding and current row)

하지만 이는 데이터의 생성 순서가 order_id + line_prod_seq로 입력되어 데이터가 그렇게 생성되었기 때문에 결과가 동일할 뿐이지, order_id별로 line_prod_seq 순서로 데이터가 생성되지 않거나 중간에 update가 발생하거나 할 경우에는 다른 결과를 가져 올 수 있습니다.

때문에 sum analytic을 사용할 때는 order by를 사용해서 명확하게 window의 방향성을 기재해 주는 것이 좋습니다.

감사합니다.

 

최윤정님의 프로필 이미지
최윤정

작성한 질문수

질문하기