반응형
윈도우 함수 중 CUME_DIST(), NTILE(), PERCENT_RANK() 이 세가지에 대해 알아보겠습니다.
CUME_DIST()
- 누적상대도수
- 동일한 값이 있을 경우, 그 값에 해당하는 행 전체를 누적 비율에 포함합니다.
- ORDER BY로 정렬된 파티션에 대해 수행됩니다.
SELECT
title, rating,
CUME_DIST() OVER (ORDER BY rating DESC) AS cume_dist
FROM webtoons;
title | rating | cume_dist |
No Home | 10 | 0.25 |
Kubera | 9 | 0.75 |
Dam in the Woods | 9 | 0.75 |
Tower of God | 5 | 1.00 |
PERCENT_RANK()
- 각 값의 순위 비율, PERCENT_RANK = (순위 - 1) / (전체 행의 수 - 1)
- 첫 번째 값의 순위 비율은 항상 0이고, 동일한 값에 대해 같은 순위를 부여합니다.
- ORDER BY로 정렬된 파티션에 대해 수행됩니다.
SELECT
title, rating,
PERCENT_RANK() OVER (ORDER BY rating DESC) AS percent_rank
FROM webtoons;
title | rating | percent_rank |
No Home | 10 | 0.0000 |
Kubera | 9 | 0.3333 |
Wall in the Woods | 9 | 0.3333 |
Tower of God | 5 | 1.0000 |
CUME_DIST()와 PERCENT_RANK()
CUME_DIST | PERCENT_RANK | |
첫 번째 값의 비율 | 항상 1/N | 항상 0 |
동일한 값의 처리 | 누적 비율에 모두 포함됨 | 동일한 순위로 처리됨 |
계산 기준 | 누적된 데이터의 비율 | (순위 - 1) / (전체 개수 - 1) |
범위 | (0, 1] (0보다 크고, 최대 1) | [0, 1] (0부터 시작, 최대 1) |
쿼리 결과 예시
num | row_num | cume_dist | percent_rank |
1 | 1 | 0.1 | 0 |
2 | 2 | 0.2 | 0.1111111111111111 |
3 | 3 | 0.5 | 0.2222222222222222 |
3 | 4 | 0.5 | 0.2222222222222222 |
3 | 5 | 0.5 | 0.2222222222222222 |
4 | 6 | 0.7 | 0.5555555555555556 |
4 | 7 | 0.7 | 0.5555555555555556 |
5 | 8 | 0.8 | 0.7777777777777778 |
6 | 9 | 1 | 0.8888888888888888 |
6 | 10 | 1 | 0.8888888888888888 |
NTILE()
- 데이터를 n개의 그룹으로 나누고, 각 행에 그룹 번호를 부여합니다.
- 데이터는 최대한 동일한 개수로 각 그룹에 분배됩니다.
SELECT
title, rating,
NTILE(2) OVER (ORDER BY rating DESC) AS ntile_group
FROM webtoons;
title | rating | ntile_group |
No Home | 10 | 1 |
Kubera | 9 | 1 |
Wall in the Woods | 9 | 2 |
Tower of God | 5 | 2 |
전체 결과 비교
title | rating | cume_dist | percent_rank | ntile_group |
No Home | 10 | 0.25 | 0 | 1 |
Kubera | 9 | 0.75 | 0.3333 | 1 |
Dam in the Woods | 9 | 0.75 | 0.3333 | 2 |
Tower of God | 5 | 1.00 | 1 | 2 |
반응형
'Database > MySQL' 카테고리의 다른 글
[MySQL] FIRST_VALUE(), LAST_VALUE(), NTH_VALUE() (0) | 2024.12.16 |
---|---|
[MySQL] WITH ROLLUP으로 집계 나타내기 (0) | 2024.10.18 |
[MySQL] CTE 활용하기 - WITH / RECURSIVE WITH (0) | 2024.10.17 |
[MySQL] 뷰(VIEW) 개념과 사용 방법 (0) | 2024.10.17 |
[MySQL] 집합 연산자 - UNION / UNION ALL / INTERSECT / EXCEPT (0) | 2024.10.16 |