SQL 순위 함수
1. ROW_NUMBER()
- 각 행에 대해 고유한 번호를 할당, 항상 1씩 증가하는 순위를 할당
SELECT value,
ROW_NUMBER() OVER (ORDER BY value DESC) AS row_number
FROM example_data;
# 결과
+-------+------------+
| value | row_number |
+-------+------------+
| 40 | 1 |
| 30 | 2 |
| 20 | 3 |
| 20 | 4 |
| 10 | 5 |
+-------+------------+
2. RANK()
- 각 행에 대해 순위를 할당, 동일한 값에 동일 순위를 부여하고, 그 다음 순위는 해당 값의 개수만큼 건너뛰게 됩니다.
SELECT value,
RANK() OVER (ORDER BY value DESC) AS rank
FROM example_data;
# 결과
+-------+------+
| value | rank |
+-------+------+
| 40 | 1 |
| 30 | 2 |
| 20 | 3 |
| 20 | 3 |
| 10 | 5 |
+-------+------+
3. DENSE_RANK()
- RANK()와 유사하지만 동일한 값에 대해 동일한 순위를 부여하고, 그 다음 순위는 값의 개수와 상관없이 1씩 증가
SELECT value,
DENSE_RANK() OVER (ORDER BY value DESC) AS dense_rank
FROM example_data;
# 결과
+-------+------------+
| value | dense_rank |
+-------+------------+
| 40 | 1 |
| 30 | 2 |
| 20 | 3 |
| 20 | 3 |
| 10 | 4 |
+-------+------------+
3개 순위 함수 비교
SELECT value,
ROW_NUMBER() OVER (ORDER BY value DESC) AS row_number,
RANK() OVER (ORDER BY value DESC) AS rank,
DENSE_RANK() OVER (ORDER BY value DESC) AS dense_rank
FROM example_data;
# 결과
+-------+------------+------+------------+
| value | row_number | rank | dense_rank |
+-------+------------+------+------------+
| 40 | 1 | 1 | 1 |
| 30 | 2 | 2 | 2 |
| 20 | 3 | 3 | 3 |
| 20 | 4 | 3 | 3 |
| 10 | 5 | 5 | 4 |
+-------+------------+------+------------+
'Language > MySQL' 카테고리의 다른 글
EXISTS 연산자 (0) | 2024.02.02 |
---|---|
이동 평균, 누적 합계 (2) | 2024.01.31 |
SQL 집계 함수 (0) | 2024.01.26 |
SQL 일반 함수 (0) | 2024.01.22 |
SQL 날짜형 함수 (0) | 2024.01.21 |