작성
·
427
0
집계 Analytic SQL에서
rows between unbounded preceding and current row 관련 질문 드립니다.
sum(amount) over (partition by order_id order by line_prod_seq) as cum_sum_by_orderid
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의 방향성을 기재해 주는 것이 좋습니다.
감사합니다.