SQL & 데이터베이스/SQL 성능 최적화 & 튜닝
[SQL] 윈도우 함수(Window Function) 개념과 활용 예제
Jinsapp
2025. 3. 13. 18:00
1. 윈도우 함수(Window Function)란?
윈도우 함수(Window Function)는 결과 집합의 행을 그룹화하여 각 행에 추가적인 계산을 수행하는 SQL 함수이다. 기본적인 집계 함수(SUM, AVG 등)와는 다르게, 여러 행을 참조하면서도 개별 행에 대한 결과를 반환하는 것이 특징이다.
✅ 윈도우 함수의 주요 특징
- 일반적인 집계 함수처럼 데이터를 그룹화하지만, 개별 행도 유지됨
OVER()
절을 사용하여 적용- 순위 계산, 누적 합산, 이동 평균 등의 기능 제공
2. 주요 윈도우 함수
함수 | 설명 | 예제 |
---|---|---|
ROW_NUMBER() |
각 그룹 내에서 순차적인 번호를 부여 | ROW_NUMBER() OVER(PARTITION BY 부서 ORDER BY 급여 DESC) |
RANK() |
순위를 매기며 동순위가 존재할 경우 건너뜀 | RANK() OVER(PARTITION BY 부서 ORDER BY 급여 DESC) |
DENSE_RANK() |
동순위가 존재해도 연속적인 순위 부여 | DENSE_RANK() OVER(PARTITION BY 부서 ORDER BY 급여 DESC) |
LAG() |
이전 행의 데이터를 참조 | LAG(급여, 1, 0) OVER(PARTITION BY 부서 ORDER BY 급여 DESC) |
LEAD() |
다음 행의 데이터를 참조 | LEAD(급여, 1, 0) OVER(PARTITION BY 부서 ORDER BY 급여 DESC) |
3. 윈도우 함수 활용 예제 (Oracle 기준)
✅ 직원 테이블 생성 및 데이터 삽입
CREATE TABLE 직원 (
사번 NUMBER PRIMARY KEY,
이름 VARCHAR2(50),
부서 VARCHAR2(50),
급여 NUMBER
);
INSERT INTO 직원 VALUES (1, '김철수', '영업', 5000);
INSERT INTO 직원 VALUES (2, '이영희', '영업', 6000);
INSERT INTO 직원 VALUES (3, '박영수', '개발', 7000);
INSERT INTO 직원 VALUES (4, '최민수', '개발', 8000);
INSERT INTO 직원 VALUES (5, '한지민', '개발', 7500);
✅ 직원 급여 순위(RANK) 조회
SELECT 이름, 부서, 급여,
RANK() OVER(PARTITION BY 부서 ORDER BY 급여 DESC) AS 급여순위
FROM 직원;
✅ 결과 예시
이름 | 부서 | 급여 | 급여순위 |
---|---|---|---|
이영희 | 영업 | 6000 | 1 |
김철수 | 영업 | 5000 | 2 |
최민수 | 개발 | 8000 | 1 |
한지민 | 개발 | 7500 | 2 |
박영수 | 개발 | 7000 | 3 |
4. 윈도우 함수의 활용 예제
✅ 직원의 급여와 이전 직원과의 차이 계산
SELECT 이름, 부서, 급여,
LAG(급여, 1, 0) OVER(PARTITION BY 부서 ORDER BY 급여 DESC) AS 이전급여,
급여 - LAG(급여, 1, 0) OVER(PARTITION BY 부서 ORDER BY 급여 DESC) AS 급여차이
FROM 직원;
✅ 결과 예시
이름 | 부서 | 급여 | 이전급여 | 급여차이 |
---|---|---|---|---|
이영희 | 영업 | 6000 | 0 | 6000 |
김철수 | 영업 | 5000 | 6000 | -1000 |
최민수 | 개발 | 8000 | 0 | 8000 |
한지민 | 개발 | 7500 | 8000 | -500 |
5. 마무리
윈도우 함수는 SQL에서 데이터를 분석하고 정렬하는 데 강력한 기능을 제공한다.
특히, 순위 매기기, 이동 평균 계산, 그룹 내 데이터 비교 등의 기능이 필요할 때 매우 유용하다.
더 많은 SQL 최적화 기법이 궁금하다면?