1. 윈도우 함수란?
: 원래 테이블의 모든 행을 유지하면서, 계산 결과를 '새로운 열'로 붙이는 것
- OVER 라는 키워드와 함께 사용
- 비교, 분석, 순위 계산 등을 동시에 할 수 있다
2. 윈도우 함수의 종류
| 함수 종류 | 대표 함수 |
| 순위(RANK) | RANK(), DENSE_RANK(), ROW_NUMBER() |
| 이전/다음 값 참조 | LAG(), LEAD() |
| 특정값 추출 | FIRST_VALUE(), LAST_VALUE() |
| 범위 지정 키워드 | ROWS BETTWEEN [시작범위] AND [끝범위] |
| 비율 | NTILE(n), CUME_DIST(), PERCENT_RANK(),RATIO_TO_REPORT() |
3. 순위 함수 종류
| ROW_NUMBER() | 무조건 1, 2, 3... 고유한 순번 부여 |
| RANK() | 같은 값이면 같은 순위, 다음 순위는 건너뜀 |
| DENSE_RANK() | 같은 값이면 같은 순위, 다음 순위는 안 건너뜀 |
| NTILE(n) | 데이터를 n개 구간으로 나눠서 1~n번 구간 부여 |
1. ROW_NUMBER()
그냥 순서대로 번호 부여 (중복 점수 상관 없음)
SELECT 이름, 점수,
ROW_NUMBER() OVER (ORDER BY 점수 DESC) AS 순번
FROM 학생;
| 이름 | 점수 | 순번 |
| 민수 | 95 | 1 |
| 철수 | 90 | 2 |
| 영희 | 90 | 3 |
| 지수 | 85 | 4 |
2. RANK()
같은 점수는 같은 순위, 다음 순위는 건너뜀
SELECT 이름, 점수,
RANK() OVER (ORDER BY 점수 DESC) AS 순위
FROM 학생;
| 이름 | 점수 | 순위 |
| 민수 | 95 | 1 |
| 철수 | 90 | 2 |
| 영희 | 90 | 2 |
| 지수 | 85 | 4 |
3. DENSE_RANK()
같은 점수는 같은 순위, 다음 순위는 연속적으로 부여
SELECT 이름, 점수,
DENSE_RANK() OVER (ORDER BY 점수 DESC) AS 순위
FROM 학생;
| 이름 | 점수 | 순위 |
| 민수 | 95 | 1 |
| 철수 | 90 | 2 |
| 영희 | 90 | 2 |
| 지수 | 85 | 3 |
4. NTILE(n)
데이터를 n등분해서 몇 분위에 속하는지 알려줌 (예: 상위 25%, 하위 25% 나누기)
SELECT 이름, 점수,
NTILE(2) OVER (ORDER BY 점수 DESC) AS 분위
FROM 학생;
| 이름 | 점수 | 분위 |
| 민수 | 95 | 1 |
| 철수 | 90 | 1 |
| 영희 | 90 | 2 |
| 지수 | 85 | 2 |
'코딩 테스트 > 02. SQL' 카테고리의 다른 글
| [프로그래머스] SQL 쿼리테스트 Lv3(2) (2) | 2025.07.29 |
|---|---|
| [프로그래머스]SQL 쿼리테스트 Lv3(1) (5) | 2025.07.28 |
| [프로그래머스] SQL 쿼리테스트 Lv2(5) (3) | 2025.07.17 |
| [프로그래머스]SQL 쿼리 테스트 Lv2(4) (7) | 2025.07.16 |
| [프로그래머스] SQL 쿼리테스트 Lv2 (3) (4) | 2025.07.16 |
