PERCENT_RANK()는 SQL에서 사용되는 창 함수(Window Function)로, 데이터 집합 내에서 각 행의 상대적인 순위를 백분율(0에서 1 사이)로 계산한다. 주로 데이터 분석에서 값의 분포를 이해하거나 특정 행이 전체에서 어느 위치에 있는지 파악할 때 유용한 함수이다.
PERCENT_RANK() = (rank - 1) / (total_rows - 1)
PERCENT_RANK() OVER (
[PARTITION BY column]
ORDER BY column
)
PARTITION BY 절은 행들을 별도의 파티션으로 나누고, ORDER BY 절은 각 파티션 내에서 행의 순서를 정한다. PERCENT_RANK()는 각 파티션마다 정렬된 순서를 바탕으로 독립적으로 값을 계산한다. 두 절은 필수가 아니지만, PERCENT_RANK()는 순서에 의존하는 함수이기 때문에 ORDER BY 절을 반드시 포함해야 한다.
| student_id | score |
|---|---|
| 1 | 90 |
| 2 | 85 |
| 3 | 95 |
| 4 | 85 |
해당 테이블에 score 데이터를 통해 퍼센트 순위를 구하는 방법
SELECT
student_id,
score,
PERCENT_RANK() OVER (ORDER BY score) AS percent_rank
FROM scores;
| student_id | score | percent_rank |
|---|---|---|
| 2 | 85 | 0.0 -- 첫 번째 순위 |
| 4 | 85 | 0.0 -- 동일 값은 같은 순위 |
| 1 | 90 | 0.6667 -- (2-1)/(4-1) = 1/3 ≈ 0.3333 |
| 3 | 95 | 1.0 -- 마지막 순위 |
| student_id | class | score |
|---|---|---|
| 1 | A | 90 |
| 2 | A | 85 |
| 3 | A | 95 |
| 4 | B | 88 |
| 5 | B | 92 |
| 6 | B | 88 |
class별로 그룹을 나누고, 각 그룹 내에서 순위 계산을 한다.
SELECT
student_id,
score,
PERCENT_RANK() OVER (PARTITION BY class ORDER BY score) AS percent_rank
FROM scores_with_class;
| student_id | class | score | percent_rank |
|---|---|---|---|
| 1 | A | 90 | 0.5 |
| 2 | A | 85 | 0.0 |
| 3 | A | 95 | 1.0 |
| 4 | B | 88 | 0.0 |
| 5 | B | 92 | 1.0 |
| 6 | B | 88 | 0.0 |
PERCENT_RANK()는 데이터의 상대적 위치를 백분율로 나타내는 창 함수로, 순위 분석이나 통계에서 유용하다. 예를 들어, 시험 점수에서 각 학생이 상위 몇 %에 속하는지 확인할 때 활용할 수 있다.