반응형
✅ 왜 Window 함수가 필요한가요?
SQL은 데이터 분석, 집계, 정렬에 매우 강력한 도구입니다. 그러나 기존의 집계 함수(SUM, AVG, COUNT 등)는 하나의 그룹 단위로만 결과를 반환하기 때문에, 원본 행과 함께 누적합, 순위, 이동평균 등의 정보를 동시에 보고자 할 경우 제약이 존재합니다.
이러한 상황에서 Window 함수(Window Function)는 같은 결과 집합 내에서 원본 행은 그대로 유지하면서, 그 위에 추가적인 계산 값을 제공할 수 있어 데이터 분석에 매우 효과적입니다.
💡 핵심 기술 개념:
- OVER 절을 기반으로 특정 "윈도우 범위" 내에서의 연산 수행
- 서브쿼리나 조인 없이 행 단위 연산과 그룹 단위 연산의 절묘한 조화
- PostgreSQL, MySQL 8.0 이상, BigQuery, Oracle, SQL Server 등 대부분의 RDBMS에서 지원
🔍 Window 함수의 기초와 활용
1. 기본 문법 구조
SELECT column1,
SUM(column2) OVER (PARTITION BY column1 ORDER BY column3)
FROM table_name;
요소 설명
OVER() | 윈도우 함수임을 명시 |
PARTITION BY | 그룹핑 기준 (집계 함수의 GROUP BY 역할) |
ORDER BY | 집계 또는 순위 기준 정렬 |
ROWS BETWEEN | 분석 범위 지정 (optional) |
2. 자주 쓰이는 Window 함수들
함수 설명
ROW_NUMBER() | 행의 고유 순번 (중복 없음) |
RANK() / DENSE_RANK() | 동일한 값에 같은 순위를 부여 |
SUM() / AVG() / COUNT() | 누적 집계 |
LAG() / LEAD() | 이전 또는 다음 행의 값 가져오기 |
NTILE(n) | 데이터를 n개의 구간으로 나눔 |
3. 실전 예제
✅ 누적 합계 (Cumulative Sum)
SELECT customer_id, purchase_date, amount,
SUM(amount) OVER (PARTITION BY customer_id ORDER BY purchase_date) AS cumulative_amount
FROM purchases;
고객별로 날짜 순으로 누적 합계를 계산합니다.
✅ 순위 매기기
SELECT department, employee_name, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank
FROM employees;
부서별 급여 순위를 매깁니다.
✅ 이전 행 비교 (LAG)
SELECT employee_id, salary,
LAG(salary, 1) OVER (ORDER BY hire_date) AS previous_salary
FROM employees;
고용일 기준으로 직전 직원의 급여를 비교할 수 있습니다.
🧾 Window 함수가 주는 이점
이점 내용
가독성 향상 | 서브쿼리나 복잡한 조인 없이도 원하는 계산 수행 |
데이터 분석 최적화 | 누적합, 순위, 이동값 등 다양한 분석 가능 |
성능 개선 | 중복 계산 제거로 효율적인 쿼리 작성 가능 |
실무 활용성 | BI 분석, 사용자 순위 계산, 트렌드 분석 등 광범위 활용 |
🎯 마무리
SQL Window 함수는 단순한 집계 함수의 한계를 넘어, "원본 데이터를 유지하면서 계산을 추가로 수행"할 수 있도록 도와주는 매우 강력한 도구입니다.
특히 대용량 데이터를 분석하거나 실무에서 복잡한 분석 리포트를 작성할 때 필수적으로 사용되므로, 꼭 익혀두시길 권장드립니다.
🏷️ 티스토리 태그 추천
✅ 핵심 기술 태그
- SQL
- Window Function
- SQL Window 함수
- OVER 함수
- PARTITION BY
- ORDER BY
- RANK 함수
✅ 실무/활용 태그
- 데이터 분석
- 누적합
- 순위 함수
- LAG LEAD
- SQL 실무
- 데이터 시각화
반응형
'테크 > MySQL' 카테고리의 다른 글
서브쿼리의 진화, CTE(Common Table Expression) 완전 정리! (0) | 2025.04.18 |
---|---|
[MySQL] root 비밀번호 잊어버렸을 때 초기화 방법 (0) | 2025.02.25 |
MySQL 비트 연산(Bitwise Operations) 완벽 가이드 (1) | 2025.01.31 |
기본 SQL 문법 튜토리얼 (0) | 2025.01.25 |