본문 바로가기
DataBase/MySQL

[MySQL] 순위 함수 정리

by 제우제우 2024. 9. 15.

순위 함수? 

순위 함수들은 데이터에 순위를 부여하거나 그룹 내에서 특정 값을 계산하는데 사용된다. 

이 함수들은 주로 분석 및 통계 작업에서 유용하다. 

MySQL 8.0부터 순위 함수들을 사용할 수 있다. 

 

주요 순위 함수들 

1. ROW_NUMBER()

2. RANK()

3. DENSE_RANK()

4. NTILE(n)

 

ROW_NUMBER()

설명 

ROW_NUMBER() 함수는 각 행에 고유한 순번을 부여한다. 

동일한 값이 있을 경우에도 순번은 고유하다. 

 

예시

SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;

 

급여가 같아도 순번은 고유하다.

RANK()

설명 

RANK() 함수는 동일한 값이 있을 경우 동일한 순위를 부여하고, 다음 순번에서 건너뛴다.

즉, 공동 순위가 존재하면 그 다음 순번이 건너뛰게 된다. 

 

예시

SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;

DENSE_RANK()

설명 

DENSE_RANK() 함수는 RANK()와 비슷하지만, 공동 순위가 있어도 순위가 건너뛰지 않는다.

 

예시

SELECT name, salary,
       DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;

NTILE(n)

설명 

NTILE(n) 함수는 결과를 n개의 그룹으로 나누고, 각 행에 그룹 번호를 할당한다.

전체 결과를 n개의 동일한 크기의 그룹으로 분배하는 데 사용한다. 

 

예시

SELECT name, salary,
       NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM employees;

 

급여를 기준으로 직원들을 4개의 그룹(사분위)으로 나누고 각 행에 1부터 4까지의 그룹 번호를 부여한다. 

데이터는 1부터 4까지의 그룹으로 분류되며, 각각은 전체 데이터의 25%씩을 차지하게 된다. 

 

함수들의 차이점 정리

ROW_NUMBER(): 고유한 순번을 부여

RANK(): 동일한 값에 동일한 순위를 부여하고, 건너뛴다. 

DENSE_RANK(): 동일한 값에 동일한 순위를 부여하지만 건너뛰지 않는다.

NTILE(n): 결과를 n개의 그룹으로 나누어 각 그룹에 번호를 할당한다. 

 

이 함수들은 모두 OVER 절과 함께 사용되며, 이 절을 통해 데이터의 정렬 방식이나 파티션을 지정할 수 있다.