🖥️ IT, 컴퓨터/🏁 SQL・빅쿼리

[SQL] 윈도우 함수(Window Function)란?

김 홍시 2024. 11. 24.
반응형

윈도우 함수(Window Function)란?

SQL에서 윈도우 함수는 데이터베이스의 결과 집합에 대해 행과 행 간의 관계를 분석하거나, 특정 그룹 내에서 계산 작업을 수행할 때 사용하는 함수입니다. 집계 함수와 비슷하지만, 집계 함수와는 달리 행을 그룹화하지 않고도 결과를 반환하면서 계산을 수행합니다.

윈도우 함수는 "윈도우"라는 개념을 기반으로 동작하며, 이 윈도우는 데이터의 특정 범위를 의미합니다.


윈도우 함수의 기본 구조

함수이름(컬럼명) OVER (
    [PARTITION BY 분할기준열]
    [ORDER BY 정렬기준열]
    [ROWS 또는 RANGE 윈도우 크기]
)

주요 요소:

  1. 함수이름:
    • 대표적인 윈도우 함수: ROW_NUMBER, RANK, DENSE_RANK, NTILE, SUM, AVG, COUNT, LAG, LEAD 등.
  2. OVER: 윈도우 함수를 정의하는 데 사용.
    • PARTITION BY: 데이터를 그룹화하여 각각의 그룹 내에서 연산 수행.
    • ORDER BY: 윈도우 내에서 연산을 수행하는 순서를 지정.
    • ROWS 또는 RANGE: 윈도우 크기를 지정.

윈도우 함수의 주요 종류와 사용법

1. 순위 관련 함수

  • ROW_NUMBER: 각 행에 고유한 순번을 부여.
  • RANK: 값이 같을 경우 같은 순위를 부여하고, 다음 순위를 건너뜀.
  • DENSE_RANK: 값이 같을 경우 같은 순위를 부여하지만, 다음 순위를 건너뛰지 않음.
  • NTILE(N): 데이터 그룹을 N개의 동일한 크기로 나눔.

예제 데이터: 성적 테이블
| 학생ID | 과목 | 점수 |
|--------|-------|------|
| 1 | 수학 | 90 |
| 2 | 영어 | 85 |
| 3 | 수학 | 95 |
| 4 | 영어 | 90 |

예제 쿼리:
SELECT 
    학생ID, 
    과목, 
    점수,
    ROW_NUMBER() OVER (PARTITION BY 과목 ORDER BY 점수 DESC) AS row_number,
    RANK() OVER (PARTITION BY 과목 ORDER BY 점수 DESC) AS rank,
    DENSE_RANK() OVER (PARTITION BY 과목 ORDER BY 점수 DESC) AS dense_rank
FROM 성적;
학생ID 과목 점수 row_number rank dense_rank
3 수학 95 1 1 1
1 수학 90 2 2 2
4 영어 90 1 1 1
2 영어 85 2 2 2

2. 집계 함수

윈도우 함수와 함께 집계 함수를 사용하면 행을 그룹화하지 않고 계산 결과를 각 행에 반환할 수 있음.

  • SUM: 누적 합.
  • AVG: 누적 평균.
  • COUNT: 누적 개수.
  • MIN/MAX: 최소/최대값.
예제 쿼리:
SELECT 
    학생ID, 
    과목, 
    점수,
    SUM(점수) OVER (PARTITION BY 과목) AS 과목별_총점,
    AVG(점수) OVER (PARTITION BY 과목) AS 과목별_평균점수
FROM 성적;
학생ID 과목 점수 과목별_총점 과목별_평균점수
1 수학 90 185 92.5
3 수학 95 185 92.5
2 영어 85 175 87.5
4 영어 90 175 87.5

3. LAG / LEAD 함수

  • LAG(컬럼명): 이전 행의 값을 가져옴.
  • LEAD(컬럼명): 다음 행의 값을 가져옴.
예제 쿼리:
SELECT 
    학생ID, 
    과목, 
    점수,
    LAG(점수) OVER (PARTITION BY 과목 ORDER BY 점수) AS 이전_점수,
    LEAD(점수) OVER (PARTITION BY 과목 ORDER BY 점수) AS 다음_점수
FROM 성적;
학생ID 과목 점수 이전_점수 다음_점수
1 수학 90 NULL 95
3 수학 95 90 NULL
2 영어 85 NULL 90
4 영어 90 85 NULL

4. 윈도우 범위 지정 (ROWS / RANGE)

윈도우 범위를 명시적으로 지정해 특정 범위에 대해서만 연산.

  • ROWS: 물리적 행의 범위 지정.
  • RANGE: 값 기반으로 범위 지정.
예제 쿼리:

직전 두 행의 합계를 계산:

SELECT 
    학생ID, 
    과목, 
    점수,
    SUM(점수) OVER (ORDER BY 점수 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS 직전_2행_합계
FROM 성적;
학생ID 과목 점수 직전_2행_합계
2 영어 85 85
1 수학 90 175
4 영어 90 265
3 수학 95 280

윈도우 함수의 주요 장점

  1. 행을 그룹화하지 않고도 계산 결과 반환: 데이터의 세부 정보를 유지하며 분석 가능.
  2. 비교 및 변화량 분석 용이: 이전/다음 행의 값 비교, 누적 합계/평균 계산 등.
  3. 유연한 범위 설정: ROWSRANGE를 통해 다양한 계산 범위 지원.
  4. 다양한 데이터 분석: 순위, 그룹별 통계, 시간 흐름에 따른 변화 등.

윈도우 함수와 일반 집계 함수의 차이

특징 집계 함수 윈도우 함수
행 그룹화 데이터 그룹화 후 결과 반환 행을 그룹화하지 않고 결과 반환
세부 정보 유지 세부 정보 손실 세부 정보 유지
사용 가능 함수 SUM, AVG, COUNT 등 SUM, AVG, COUNT, RANK, LAG 등
결과 반환 방식 그룹당 1개의 결과 반환 각 행마다 결과 반환

윈도우 함수는 데이터 분석과 비즈니스 인텔리전스에서 필수적인 도구로, 복잡한 데이터 처리와 비교 작업을 간결하게 수행할 수 있습니다! 🚀

반응형

'🖥️ IT, 컴퓨터 > 🏁 SQL・빅쿼리' 카테고리의 다른 글

[SQL] LEAD 함수란?  (0) 2024.11.24
[SQL] LAG란?  (0) 2024.11.24
[SQL] INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 차이점  (0) 2024.11.24
[SQL] LIKE란?  (0) 2024.11.24
[SQL] HAVING 절이란?  (0) 2024.11.24

댓글