③ CUME_DIST( )와 PERCENT_RANK( )
CUME_DIST 함수는 주어진 그룹에 대한 상대적인 누적분포도 값을 반환한다. 분포도 값(비율)이므로 반환 값의 범위는 0초과 1이하 사이의 값을 반환한다. 부서별 급여에 따른 누적분포도 값을 구해보자.
입력
SELECT department_id, emp_name,
salary,
CUME_DIST() OVER (PARTITION BY department_id
ORDER BY salary ) dep_dist
FROM employees;
10번 부서에서는 총 로우 개수가 한 개이므로 1을, 20번 부서는 로우 개수가 2이므로 급여순으로 0.5와 1을 반환했다. 30번 부서는 총 개수가 6이고 Karen Colmenares는 0.16, Guy Himuro는 0.33을 반환했다. 누적분포 값이므로 30번 부서에서 급여 순으로 Karen이 차지하는 비율은 16%이고, Karen과 Guy가 차지하는 비율은 33%이다. 즉 Guy의 급여 이하를 받는 사원은 30번 부서 전체를 기준으로 33%(2명 / 6명)라는 의미다.
PERCENT_RANK 함수는 해당 그룹 내의 백분위 순위Percentile Rank 를 반환한다. 0초과 1이하의 누적분포 값을 반환하는 CUME_DIST와는 달리, PERCENT_RANK는 0이상 1이하 값을 반환한다. 백분위 순위란 그룹 안에서 해당 로우의 값보다 작은 값의 비율을 말한다. 60번 부서에 대한 CUME_DIST와 PERCENT_RANK 값을 조회해 보자.
입력
SELECT department_id, emp_name,
salary
,rank() OVER (PARTITION BY department_id
ORDER BY salary ) raking
,CUME_DIST() OVER (PARTITION BY department_id
ORDER BY salary ) cume_dist_value
,PERCENT_RANK() OVER (PARTITION BY department_id
ORDER BY salary ) percentile
FROM employees
WHERE department_id = 60;
위 결과를 보면 David과 Valli는 급여가 4,800으로 같아 순위가 2위, 이 두 사원의 급여보다 작은 사람은 1명이므로 백분위 순위(percentile) 값은 25% (¼)가 된다. Bruce의 급여 6,000보다 작은 사원이 총 3명이므로 백분위 순위 값은 75% (¾), Alexander는 100%가 된다. 백분위 순위란 개념 자체가 자신(현재 로우)보다 작은 값의 비율이므로 Alexander 보다 낮은 급여를 받는 비율이 100%라는 뜻은 60번 부서에서 급여가 가장 높음을 의미한다. 마찬가지로 가장 적은 월급을 받는 Diana는 자신보다 낮은 급여를 받는 사람이 없으므로 0%가 되는 것이다.