• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

rows between unbounded preceding and current row 관련 질문

23.04.07 06:50 작성 조회수 290

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의 방향성을 기재해 주는 것이 좋습니다.

감사합니다.