데이터 분석/SQL

SQL) 윈도우 함수

engwoon 2024. 12. 3. 21:25

윈도우 함수

  • OVER()절과 함께 사용된다.
  • 행을 그룹화(PARTITION), 정렬(ORDER BY), 범위 설정(ROWS | RANGE)하여 다양한 함수들을 제공한다.
  • 행 단위로 계산을 수행하여 결과를 출력한다. 
  • 기본문법
SELECT 윈도우함수(컬럼1) OVER (
[PARTITION BY 컬럼2] -- 그룹화
[ORDER BY 컬럼3 ASC|DESC] -- 정렬
[ROWS|RANGE BETWEEN A AND B] -- 계산 범위
) AS 결과
FROM 테이블;

 

  • 진행순서
    • 1. 데이터를 파티션으로 나눈다. (그룹화)
    • 2. 각 그룹별로 데이터 정렬
    • 3. 정렬된 데이터 내에서 연산범위 설정
    • 4. 지정된 범위와 정렬에 따라 윈도우함수 값 계산
  • 윈도우 함수 특징
    • 집계함수의 확장: SUM, AVG 등 집계 결과를 "개별 행에 표시" -> 각 행의 데이터와 함께 집계 결과를 유지
    • 원본 데이터 유지: 원본 데이터 + 윈도우 함수 결과를 동시에 확인 가능
    • 다양한 기능의 함수 제공: 순위 매기기, 백분위 계산 등
  • 언제 실행?
FROM → ON → JOIN → WHERE → GROUP BY → HAVING →[윈도우 함수]→ SELECT → DISTINCT → ORDER BY → LIMIT

* HAVING과 SELECT절 사이에서 실행된다.

 

 

윈도우 함수 종류

  • 순위 함수 : rank(), dense_rank(), row_number()
    • RANK(): 순위를 매기되, 여러 행의 값이 같으면 같은 순위를 준다. (공동순위)
    • DENSE_RANK(): 여러 행의 값이 같으면 같은 순위를 준다. (다음 순위 건너뛰지 않음)
    • ROW_NUMBER(): 동일한 값에 고유한 순위를 부여
  • 집계함수 : sum() -> 그룹화된 데이터(파티션 내)에 대한 누적합 계산
  • 행(row) 참조 함수: lag(), lead()
    • lag(): 이전 행 참조
    • lead(): 다음 행 참조
  • 비율 함수: percent_rank() -> 데이터의 백분위 순위를 계산

 

파티션 범위 지정

  • 윈도우 함수의 범위는 ROWS 또는 RANGE를 사용하여 지정한다.
  •