004 Window Function

Analytic SQL - 집계(Aggregate) Analytic과 Window 상세 #

Aggregate Functions vs Window Functions #

img.png

  • Aggregate Functions
    • Group by는 원본 데이터 집합의 레벨을 변경하여 적용
  • Window Functions
    • Analytic SQL은 원본 데이터 집합의 레벨을 그대로 유지하면서 적용
    • Window를 이용하여 Row 단위의 집합 연산 수행 가능
    • 원본 데이터의 레벨을 그대로 유지하면서, 그룹핑 레벨에서 자유롭게 Window의 이동과 크기를 조절하면서 Analytic을 수행

Analytic SQL 적용 로직 #

img_1.png

<Analytic function> (인자1, ...) OVER ( [Partition절] [Sorting절] [Window절] )
  • 자유로운 window 설정에 따른 analytic 구사가 가능하므로, SQL의 Analytic 함수를 window 함수로도 지칭한다.

순위 Analytic #

  1. rank
  • 공동 순위가 있을 경우 다음 순위는 공동 순위 개수만큼 밀려서 정함
  • 1,2,2,4 또는 1,2,2,2,5
  1. dense_rank
  • 공동 순위가 있더라도 다음 순위는 바로 이어서 정함
  • 1,2,2,3 또는 1,2,2,2,3
  1. row_number
  • 공동 순위가 있더라도 반드시 unique한 순위를 정함
  • 1,2,3,4,5

NULL 처리

  • Nulls first : NULL을 최우선 순위로 (default)
  • Nulls las : NULL을 가장 마지막 순위로
rank() OVER (<Partition절> order by column [nulls first/last])

집계(aggregate) 계열 analytic 함수 #

  • sum(), max(), min(), avg(), count() 등
  • order by절이 있을 경우 window 절은 기본적으로 range unbounded preceding and current row이다.
  • order by절이 없다면 window는 해당 partition의 모든 row를 대상으로 한다.
  • partition, order by절 모두 없다면 window는 전체 데이터의 row를 대상으로한다.

range와 rows의 차이 #

  • range : range unbounded preceding and current row
  • rows : rows between unbounded preceding and current now
  • 동일한 order by컬럼 값이 있을 경우
    • range : 중복되는 값들 모두를 대상으로 한다.
      • current row를 자신의 row가 아닌 동일 값이 있는 전체 row를 동일 그룹으로 간주하여 집계에 적용한다.
    • rows : 중복이 되더라도 current row를 대상으로 한다.

실습코드 #