문법 |

목적 |
CUME_DIST함수는 값의 그룹에 있는 값의 누적 분포치를 계산한다. 반환되는 값의 범위는 0보다
크고 1보다 작다. 이값은 항상 같은 누적 값에 대하여 평가한다. 이 함수는 임의의 수치형 데이터 또는 암묵적으로 수치 데이터형으로 변환 가능한
비 수치형데이터이다. 오라클 데이터베이스는 수치 우선 순위가 가장 높은 인수를 판단하여, 나머지 인수를 암묵적으로 변환하고, 계산을 수행하여
NUMBER를 반환한다.
PARTITION BY에 의해 나누어진 그룹별로 각 row를 ORDER BY절에 명시된 순서로
정렬한 후 그룹별 상대적인 위치(누적된 분산정도)를 구한다. 상대적인 위치는 구하고자 하는 값보다 작거나 같은 값을 가진 ROW수를 그룹내 총
ROW 수로 나눈 것을 의미하며 결과 값의 범위는 0보다 크고 1보다 작거나 같다.
SELECT r_regionkey, p_productkey, SUM(s_amount) as s_amount,
CUME_DIST() OVER (PARTITION BY r_regionkey ORDER BY SUM(s_amount))
AS cume_dist_per_region
FROM region, product, sales
WHERE r_regionkey = s_regionkey AND p_productkey = s_productkey
GROUP BY r_regionkey, p_productkey ORDER BY r_regionkey, s_amount DESC;
예제 |
다음 예제는 oe.employees테이블에서 종업원 중에서 급여가 15,500달러이고, 수수료가
5%인 종업원의 누적 분포를 계산한다.
SELECT CUME_DIST(15500, .05) WITHIN GROUP
(ORDER BY salary, commission_pct) "Cume-Dist of 15500"
FROM employees;
Cume-Dist of 15500
------------------
.972222222
다음 예제는 구매 부분의 각 종업원의 급여 퍼센트를 계산한다. 예를 들어, 종업원의 40%가 Himuro의 급여 이하의 급여를 받는 것을 알 수 있다.
SELECT job_id, last_name, salary, CUME_DIST() OVER (PARTITION BY job_id ORDER BY salary) AS cume_dist FROM employees WHERE job_id LIKE 'PU%'; JOB_ID LAST_NAME SALARY CUME_DIST ---------- ------------------------- ---------- ---------- PU_CLERK Colmenares 2500 .2 PU_CLERK Himuro 2600 .4 PU_CLERK Tobias 2800 .6 PU_CLERK Baida 2900 .8 PU_CLERK Khoo 3100 1 PU_MAN Raphaely 11000 1