SQL 마스터 윈도우 함수: 데이터 분석 최적화 팁
Source: Dev.to

데이터와 백엔드 여러분, 안녕하세요! SQL을 다루다 보면 누구나 GROUP BY에 익숙해져 있습니다. GROUP BY는 매우 강력하지만, 치명적인 단점이 하나 있습니다: 행을 “묶어” 버려서 원본 데이터 각 행의 상세 정보를 잃어버린다는 점이죠.
만약 상사가 “각 주문의 상세와 해당 월 전체 매출 합계를 같은 행에 표시해 주세요” 라고 요구한다면? 바로 **Window Function (윈도우 함수)**가 빛을 발합니다!
1. Window Function이란?
Window Function은 현재 행과 관련된 행들의 집합(“윈도우”)에 대해 계산을 수행하지만 반환되는 행 수는 변경하지 않습니다.
기본 구조
SQL이 Window Function을 사용하고 있음을 인식하려면 OVER() 절이 필요합니다. OVER() 안에는 보통 다음이 포함됩니다:
PARTITION BY– 데이터를 그룹으로 나눕니다(GROUP BY와 유사하지만 행을 합치지는 않음).ORDER BY– 각 그룹 내에서 데이터를 정렬합니다.ROWS/RANGE– 더 좁은 윈도우 프레임을 정의합니다(예: 가장 최근 3행의 합만 계산).
2. 평면 윈도우 함수 종류
A. 집계 윈도우 함수 (Aggregate Window Functions)
여전히 SUM, AVG, COUNT, MAX, MIN 이지만 OVER()와 함께 사용됩니다.
예시: 연도별 일일 누적 매출 합계 계산
SELECT
MaDonHang,
NgayDatHang,
TongTien,
SUM(TongTien) OVER (
PARTITION BY YEAR(NgayDatHang)
ORDER BY NgayDatHang
) AS TongLuyKeNam
FROM DonHang;
B. 순위 윈도우 함수 (Ranking Window Functions)
‘Top N’ 제품이나 우수 직원을 찾는 데 유용합니다.
| 함수 | 설명 |
|---|---|
ROW_NUMBER() | 연속적인 순번 1, 2, 3, …을 부여 (동일값은 무시). |
RANK() | 값이 동일하면 동점 처리하지만 다음 순위를 건너뜀 (예: 1, 2, 2, 4). |
DENSE_RANK() | 값이 동일하면 동점 처리하지만 다음 순위를 건너뛰지 않음 (예: 1, 2, 2, 3). |
예시: 카테고리별 베스트 판매 제품 순위 매기기
SELECT
DanhMuc,
TenSanPham,
TongSoLuongBan,
RANK() OVER (
PARTITION BY DanhMuc
ORDER BY TongSoLuongBan DESC
) AS HangSanPham
FROM SanPhamBanChay;
C. 값 윈도우 함수 (Value Window Functions)
현재 행을 기준으로 이전 행이나 다음 행의 값을 가져옵니다 – 변동 계산(MoM, YoY)에 매우 유용합니다.
LAG()– 이전 행의 값을 가져옵니다.LEAD()– 다음 행의 값을 가져옵니다.
예시: 이번 달 매출을 이전 달 매출과 비교
SELECT
Thang,
DoanhSo,
LAG(DoanhSo, 1, 0) OVER (ORDER BY Thang) AS DoanhSoThangTruoc,
DoanhSo - LAG(DoanhSo, 1, 0) OVER (ORDER BY Thang) AS ChenhLech
FROM BaoCaoDoanhSo;
3. 성능 최적화 팁
- 인덱스는 필수 –
PARTITION BY와ORDER BY에 사용되는 컬럼에 적절한 인덱스가 설정되어 있는지 확인하십시오; 그렇지 않으면 DB가 수동 정렬을 수행해야 하며 리소스를 많이 소모합니다. - 너무 넓은 윈도우 프레임 제한 – 실제로 필요하지 않은 경우, 대용량 데이터셋에
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING을 사용하는 것을 피하십시오. - CTE(
WITH ... AS)와 결합 – 복잡한 윈도우 함수가 많이 필요할 때, CTE로 분리하면 코드 가독성이 향상되고 DB가 실행 계획을 더 잘 최적화합니다.
Nguồn tham khảo: ITPrep – Hướng dẫn chuyên sâu về Window Function trong SQL
🎯 요약
긴 서브쿼리를 작성하고 실행 속도가 느린 대신, 윈도우 함수는 우아한 구문과 뛰어난 실행 속도를 제공합니다. 데이터 분석 작업이나 백엔드 보고서 처리에 있어 이것은 필수 기술입니다.
추가 탐색: SQL 문제를 연습하고, 쿼리를 최적화하거나 데이터베이스 설계를 배우고 싶다면 ITPrep 블로그를 방문해 오늘 바로 스킬을 업그레이드하세요!