윈도우 함수 (Window Function)
SQL에서 특정 그룹에 대해 집계 또는 계산을 수행하는 함수이다.
`OVER`절을 통해 윈도우를 정의하며, 특정 그룹 내에서 순서에 따라 계산하거나 누적 통계 값을 구할 수 있다.
기존의 집계 함수(Aggregate Function)와 달리, 원본 데이터를 유지하면서 계산 결과를 추가로 반환한다.
윈도우 함수와 집계 함수
| 특징 | 윈도우 함수 | 집계 함수 |
| 데이터 유지 여부 |
그룹 내 계산 결과를 추가로 반환하며, 원본 데이터는 유지한다. |
그룹화된 결과만 반환하며, 원본 데이터는 제거한다. |
| 사용 가능 함수 |
`SUM`, `AVG`, `COUNT`, `ROW_NUMBER`, `RANK`, `NTILE`, `LEAD`, `LAG` 등 | `SUM`, `AVG`, `COUNT`, `MAX`, `MIN` 등 |
| `OVER`절 사용 |
필수. `OVER`절을 통해 윈도우를 정의 |
사용 불가. |
| `GROUP BY`절 사용 |
필요 없음. 윈도우 함수는 `GROUP BY` 없이도 개별 행을 기준으로 계산 가능 |
필수. 집계 함수는 보통 `GROUP BY`와 함께 사용하여 데이터를 그룹화 |
| 출력 결과 | 각 행에 대해 계산된 결과를 추가로 반환. | 그룹화된 결과만 반환. |
윈도우 함수의 기본 구조
<윈도우 함수> OVER (
[PARTITION BY <컬럼>] -- 데이터를 그룹화 (선택 사항)
[ORDER BY <컬럼>] -- 그룹 내에서 순서를 지정 (선택 사항)
)
- 윈도우 함수
- 계산을 수행할 함수
- 예: SUM, AVG, ROW_NUMBER, RANK, NTILE, LAG, LEAD 등
- OVER 절
- 윈도우를 정의하는 절
- PARTITION BY와 ORDER BY를 조합하여 계산 범위와 순서를 지정
- PARTITION BY
- 데이터를 특정 컬럼 값 기준으로 그룹화
- 그룹화된 각 그룹 내에서 계산을 독립적으로 수행
- ORDER BY
- 그룹 내에서 계산 순서를 지정
윈도우 함수의 주요 함수
집계 함수
SUM, AVG, COUNT, MAX, MIN 등.
기존 집계 함수와 동일하지만, 윈도우 내에서 작동하며 원본 데이터를 유지.
순위 함수
ROW_NUMBER(): 윈도우 내에서 순위를 부여.
RANK(): 동일 값에 동일 순위를 부여하고, 다음 순위는 건너뜀.
DENSE_RANK(): 동일 값에 동일 순위를 부여하되, 순위를 건너뛰지 않음.
행 이동 함수
LAG(): 현재 행의 이전 행 값.
LEAD(): 현재 행의 다음 행 값.
누적/창 함수
FIRST_VALUE(): 윈도우 내 첫 번째 값.
LAST_VALUE(): 윈도우 내 마지막 값.
윈도우 함수 사용 예시
2025.01.14 - [Algorithm Solving/SQL] - [programmers] SQL Lv. 3 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
[programmers] SQL Lv. 3 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/151139 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 설명 다음은 어
mannakingdom.tistory.com
'TIL (Today I Learned)' 카테고리의 다른 글
| [Spring] JPA Auditing 적용하기: @CreatedDate, @LastModifiedDate 활용법 (0) | 2025.02.07 |
|---|---|
| [TIL] SQL - WITH RECURSIVE 개념과 사용법 (0) | 2025.02.06 |
| [Java] 상속(Inheritance)과 다형성(Polymorphism) 이해 (0) | 2025.01.10 |
| [Java] 예외 처리 방법: 기본 구조, throw/throws, 사용자 정의 예외 (1) | 2025.01.10 |
| [Java] 스택 자료구조: Stack과 Deque 비교 (0) | 2025.01.10 |