# 윈도우 함수

윈도우 함수는 분석 함수로 불리기도 합니다(Analytics, Window Function)

# 집계 함수

  • Aggregation Function

GROUP BY와 함께 사용한 COUNT나 AVG는 컬럼의 특정 Value을 기준으로 집계하면서 하나의 값을 반환합니다.

SELECT
  
FROM 
GROUP BY 


# 윈도우 함수

  • 다음과 같은 경우 유용한 함수
    • A 유저의 전 주문 수량은 얼마나 될까?
    • B 유저가 물건을 구입하기 전에 상세보기 페이지를 얼마나 방문했을까?
    • C 유저의 특정 구매 시점별 누적 구매 횟수는?
    • 특정 카테고리 내에서 제일 많이 방문한 제품은?

이런 경우 모두 윈도우 함수(분석 함수)를 사용하면 편리합니다. 윈도우 함수를 사용하지 않으면 서브 쿼리와 JOIN 등을 사용해서 만들어야 합니다.

집계 함수와 다르게 윈도우 함수는 각 행마다 단일 값을 반환합니다

종류

  1. 탐색 함수 : LEAD, LAG, FIRST_VALUE, LAST_VALUE
  2. 번호 지정 함수 : RANK, DENSE_RANK, PERCENT_RANK, CUME_DIST, NTILE
  3. 집계 분석 함수 : 집계 함수들, AVG, COUNT, SUM, MAX, MIN

문법

  • 함수 이름(컬럼, OFFSET) OVER (PARTITION BY 파티션_컬럼 ORDER BY 정렬_컬럼)
    • OFFSET : 값을 가져올 행의 위치. 기본 값은 1이고 생략 가능
  • 함수 이름(컬럼) OVER (PARTITION BY 파티션_컬럼 ORDER BY 정렬_컬럼)
  • 필요에 따라 PARTITION BY는 생략 가능


# LEAD

다음 행의 값을 반환하는 함수



# LAG

이전 행의 값을 반환하는 함수



# RANK

특정 파티션 내의 순위를 반환하는 함수

동일한 값이 있는 경우 중복 순위를 반환하고, 그 이후는 건너뛰고 반환합니다

예를 들어 공동 2등이 2명이면, 그 이후엔 4등부터 나옵니다



# ROW_NUMBER

특정 파티션의 순위를 반환하는 함수

RANK와 다르게 중복이 있어도 임의로 순위를 반환합니다. 중복이 있는 경우엔 데이터가 계속 변경될 수 있어 주의가 필요합니다.



# AVG

AVG 함수는 집계 함수로 활용할 수도 있고, 윈도우 함수에도 사용할 수 있습니다.

특정 파티션 내의 평균을 구할 때 활용할 수 있으며, 대표적으로 이동 평균 값을 구할 수 있습니다.



# COUNT

COUNT 함수도 AVG 함수와 마찬가지로 집계 함수와 윈도우 함수로 활용할 수 있습니다.

특정 파티션 내의 요소를 COUNT할 때 활용할 수 있습니다.



# 정리