본문 바로가기
IT 공부/SQL

SQL(19) - 윈도우 함수

by Happy_Bin 2025. 8. 13.

윈도우 함수(Windows Functions) 정리

SQL에서 윈도우 함수는 행과 행 사이의 관계를 계산하거나 누적 값, 순위, 비율 등을 구하는 데 사용되는 함수다.
GROUP BY와 유사하게 행 단위로 집계를 수행할 수 있지만, 두 연산 방식에는 중요한 차이가 있다.
GROUP BY는 집계 결과로 새로운 그룹별 행 구성을 만들지만, 윈도우 함수는 기존 행의 구조를 유지하면서 각 행에 새로운 값을 추가하거나 기존 값을 계산할 수 있다.


1. 순위 함수 (Ranking Functions)

윈도우 함수 중 가장 대표적인 기능은 순위 계산이다. 주로 RANK, DENSE_RANK, ROW_NUMBER 세 가지를 사용한다.

  • RANK: 동일 순위의 행이 있을 경우 같은 순위값을 가진다. 이후 순위값은 앞 순위까지의 누적 개수 +1이 된다.
  • DENSE_RANK: 동일 순위의 행은 같은 순위값을 가지지만, 이후 순위는 단순히 +1로 증가한다.
  • ROW_NUMBER: 동일 순위라도 각각의 행이 고유한 순위값을 가진다.

순위 함수는 주로 리더보드, 성적순 정렬, 순위 분석 등에 활용된다.


2. 집계 함수 (Aggregate Functions with OVER)

기존 집계 함수와 비슷하지만, OVER 절을 사용하면 파티션별 집계 또는 누적 집계가 가능하다.

  • COUNT: Null을 제외한 행 수를 계산하며, 파티션별 혹은 누적 개수로 반환한다.
  • SUM: 칼럼 값을 합산하며, 파티션별 합계 또는 누적 합계를 구할 수 있다.
  • AVG: 칼럼 평균을 파티션별 혹은 누적 평균으로 반환한다.
  • MIN / MAX: 칼럼의 최솟값 또는 최댓값을 파티션별로 반환한다.

윈도우 함수를 사용하면 특정 그룹의 통계뿐 아니라, 각 행별 누적값을 쉽게 계산할 수 있다.


3. 행 순서 함수 (Row Navigation Functions)

행 순서를 기준으로 특정 값이나 이전/다음 행의 값을 조회할 수 있다.

  • FIRST_VALUE: 파티션별로 그룹 내 가장 처음 값을 반환한다.
  • LAST_VALUE: 파티션별로 그룹 내 가장 마지막 값을 반환한다.
  • LAG: 지정된 행 수만큼 이전 행의 값을 반환한다.
  • LEAD: 지정된 행 수만큼 이후 행의 값을 반환한다.

행 순서 함수는 이전/다음 비교, 트렌드 분석, 변화율 계산 등에 유용하다.


4. 비율 함수 (Distribution & Ratio Functions)

윈도우 함수는 파티션 내 비율 계산에도 활용된다. 주로 백분율, 등급, 구성비 계산에 사용된다.

  • CUME_DIST: 파티션 내 누적 백분율을 소수점 단위로 계산하여 반환한다. 마지막 행의 값은 1이 된다.
  • PERCENT_RANK: 파티션 내 순서별 백분율을 반환한다. 첫 행은 0, 마지막 행은 1이다.
  • NTILE(N): 파티션을 N등분하여 1부터 N까지 등급 값을 반환한다. 전체 개수를 N으로 나누고 나머지는 앞 등급 순서로 배분한다.
  • RATIO_TO_REPORT: 파티션 내 합계 대비 각 행의 비율을 계산하여 반환한다.

이 함수들을 활용하면 누적 점유율, 등급 분포, 구성 비율 분석 등이 가능하다.


마무리

윈도우 함수는 기존 행을 유지하면서 각 행에 대한 추가 계산을 수행할 수 있는 강력한 기능을 제공한다.
순위, 집계, 행 순서, 비율 계산 등 다양한 분석 요구를 만족시키며, 복잡한 쿼리도 간결하게 작성할 수 있게 돕는다.
GROUP BY와 혼동하지 않고, 각 기능의 차이를 이해하는 것이 핵심이다.


📮 BeanSight | 해피빈(HappyBin)
윈도우 함수는 행과 행 사이의 관계를 다루는 SQL의 눈과 같다. 데이터를 더 깊이 보고, 새로운 가치를 만들어내는 데 필수적인 도구다.

'IT 공부 > SQL' 카테고리의 다른 글

SQL(21) - PIVOT절과 UNPIVOT절과 정규표현식  (3) 2025.08.18
SQL(20) - Top N 쿼리 & 셀프 조인  (6) 2025.08.17
SQL - (18) 집합연산자와 그룹함수  (2) 2025.08.11
SQL (17) - 서브쿼리  (2) 2025.08.07
SQL - (16) 표준 조인  (7) 2025.08.05