MySQL 8.0 이상에서 지원하는, 대표적인 함수들을 정리해보았다.
정의: 그룹 내 데이터를 정렬 후 지정한 bucket 수로 나누고, 각 행에 bucket 번호를 부여한다.
사용 예시:
SELECT
id,
size_of_colony,
NTILE(4) OVER (ORDER BY size_of_colony) AS tile
FROM ECOLI_DATA
ORDER BY id;
결과 예시
| id | size_of_colony | tile |
|---|---|---|
| 1 | 10 | 1 |
| 2 | 23 | 2 |
| 3 | 41 | 3 |
| 4 | 58 | 4 |
정의: 그룹 내에서 현재 행의 누적 분포 비율을 계산한다.
사용 예시:
SELECT
id,
size_of_colony,
CUME_DIST() OVER (ORDER BY size_of_colony) AS cumulative_ratio
FROM ECOLI_DATA;
결과 예시
| id | size_of_colony | cumulative_ratio |
|---|---|---|
| 1 | 10 | 0.25 |
| 2 | 23 | 0.50 |
| 3 | 41 | 0.75 |
| 4 | 58 | 1.0 |
정의: 값이 동일한 경우 같은 순위를 부여하며, 순위를 건너뛰지 않는다.
사용 예시:
SELECT
id,
size_of_colony,
DENSE_RANK() OVER (ORDER BY size_of_colony DESC) AS dense_rank
FROM ECOLI_DATA;
| id | size_of_colony | dense_rank |
|---|---|---|
| 4 | 58 | 1 |
| 3 | 41 | 2 |
| 2 | 41 | 2 |
| 1 | 10 | 3 |
정의: 값이 동일하면 같은 순위를 부여하며, 다음 순위는 건너뛴다.
사용 예시:
SELECT
id,
size_of_colony,
RANK() OVER (ORDER BY size_of_colony DESC) AS rank
FROM ECOLI_DATA;
결과 예시
| id | size_of_colony | rank |
|---|---|---|
| 4 | 58 | 1 |
| 3 | 41 | 2 |
| 2 | 41 | 2 |
| 1 | 10 | 4 |
정의: 중복 여부와 상관없이 각 행에 고유 순번을 부여한다.
사용 예시:
SELECT
id,
size_of_colony,
ROW_NUMBER() OVER (ORDER BY size_of_colony DESC) AS row_num
FROM ECOLI_DATA;
결과 예시
| id | size_of_colony | row_num |
|---|---|---|
| 4 | 30 | 1 |
| 2 | 20 | 2 |
| 3 | 20 | 3 |
| 1 | 10 | 4 |
정의: 이전 또는 다음 행 값에 접근할 수 있다.
사용 예시:
SELECT
id,
size_of_colony,
LAG(size_of_colony, 1) OVER (ORDER BY id) AS prev_colony,
LEAD(size_of_colony, 1) OVER (ORDER BY id) AS next_colony
FROM ECOLI_DATA;
결과 예시
| id | size_of_colony | prev_colony | next_colony |
|---|---|---|---|
| 1 | 10 | NULL | 23 |
| 2 | 23 | 10 | 41 |
| 3 | 41 | 23 | 58 |
| 4 | 58 | 41 | NULL |
정의: 그룹 내에서 행의 순위를 백분위 순위로 반환한다.
사용 예시:
SELECT
id,
size_of_colony,
PERCENT_RANK() OVER (ORDER BY size_of_colony) AS percent_rank
FROM ECOLI_DATA;
결과 예시:
| id | size_of_colony | percent_rank |
|---|---|---|
| 1 | 10 | 0.0 |
| 2 | 23 | 0.3333 |
| 3 | 41 | 0.6667 |
| 4 | 58 | 1.0 |
정의: 그룹 내에서 값이 전체 합에서 차지하는 비율을 계산한다.
사용 예시:
SELECT
id,
size_of_colony,
size_of_colony / SUM(size_of_colony) OVER () AS ratio
FROM ECOLI_DATA;
결과 예시
| id | size_of_colony | ratio |
|---|---|---|
| 1 | 10 | 0.0714 |
| 2 | 23 | 0.1643 |
| 3 | 41 | 0.2929 |
| 4 | 58 | 0.4143 |
정의: 값을 균등한 간격의 버킷(구간)에 할당한다.
사용 예시:
SELECT
id,
size_of_colony,
WIDTH_BUCKET(size_of_colony, 0, 100, 4) AS bucket
FROM ECOLI_DATA;
결과 예시
| id | size_of_colony | bucket |
|---|---|---|
| 1 | 10 | 1 |
| 2 | 23 | 1 |
| 3 | 41 | 2 |
| 4 | 58 | 3 |