순위 함수?
순위 함수들은 데이터에 순위를 부여하거나 그룹 내에서 특정 값을 계산하는데 사용된다.
이 함수들은 주로 분석 및 통계 작업에서 유용하다.
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 절과 함께 사용되며, 이 절을 통해 데이터의 정렬 방식이나 파티션을 지정할 수 있다.
'DataBase > MySQL' 카테고리의 다른 글
[MySQL] Common Table Expression (CTE) (0) | 2024.09.12 |
---|---|
[MySQL] 자주 사용하는 함수 정리 - Updatable (1) | 2024.09.09 |
[MySQL] 실행 문제 (0) | 2024.05.21 |