본문 바로가기
Language/MySQL

SQL 순위 함수

by Mesut Özil 2024. 1. 28.

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