본문 바로가기

[오라클 레퍼런스 함수] CUME_DIST - 누적 분포 계산

by ㅇㅍㅍ 2023. 8. 3.
[오라클 레퍼런스 함수] CUME_DIST - 누적 분포 계산
728x90

CUME_DIST

 

집계 구문

CUME_DIST(expr[,expr ]...) WITHIN GROUP
  (ORDER BY expr [ DESC | ASC ]
                 [ NULLS { FIRST | LAST } ] 
            [, expr [ DESC | ASC ]
                    [ NULLS { FIRST | LAST } ]
            ]...
  )

 

분석 구문

CUME_DIST() OVER ([ query_partition_clause ] order_by_clause)

 

참고:

구문, 의미, 그리고 제한 사항에 대한 정보는 Analytic Functions에 대한 내용을 참조하세요.

 

목적

CUME_DIST는 값 그룹 내에서 값의 누적 분포를 계산합니다. CUME_DIST가 반환하는 값의 범위는 0보다 크고 1보다 작거나 같습니다. 동일한 값을 가진 경우 항상 같은 누적 분포 값으로 계산됩니다.

이 함수는 어떤 숫자 데이터 유형이나 숫자 데이터 유형으로 암묵적으로 변환될 수 있는 비숫자 데이터 유형을 인수로 사용할 수 있습니다. Oracle 데이터베이스는 가장 높은 숫자 우선순위를 가진 인수를 결정하고, 나머지 인수를 해당 데이터 유형으로 암묵적으로 변환하여 계산을 수행하며, NUMBER 값을 반환합니다.

 

참고:

암시적 변환에 대한 자세한 정보는 표 2-8을 참조하세요. 숫자 우선순위에 대한 정보는 Numeric Precedence를 참조하십시오.

 

  • CUME_DIST 함수는 집계 함수로 사용되는 경우, 가상의 행 r과 정렬 지정에 따라 집계 그룹 내에서 행 r의 상대적 위치를 계산합니다. Oracle은 이 계산을 집계 대상 행 집합에 가상의 행 r이 삽입된 것처럼 수행합니다. 함수의 인수는 집계 그룹 내의 단일 가상 행을 식별합니다. 따라서 각 집계 그룹 내에서 이러한 인수들은 모두 상수 표현식으로 평가되어야 합니다. 상수 인수 표현식과 집계의 ORDER BY 절의 표현식은 위치별로 일치해야 합니다. 따라서 인수의 수는 동일해야 하며, 그 유형은 호환되어야 합니다.
  • CUME_DIST 함수가 분석 함수로 사용되는 경우, 지정된 값 그룹 내에서 지정된 값을 기준으로 상대적 위치를 계산합니다. 오름차순으로 가정할 때, 행 r에 대한 CUME_DIST는 값이 r의 값보다 작거나 같은 행의 수를 평가되는 행의 수(전체 쿼리 결과 집합 또는 파티션)로 나눈 값입니다.

 

집계 예제

다음 예제는 샘플 테이블 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

 

분석 예제

다음 예제는 구매 부서의 각 직원에 대해 급여 백분위수를 계산합니다. 예를 들어, 직원 Himuro의 급여가 구매 부서의 직원 중 40% 이하인 직원들보다 적습니다.

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%'
  ORDER BY job_id, last_name, salary, cume_dist;

JOB_ID     LAST_NAME                     SALARY  CUME_DIST
---------- ------------------------- ---------- ----------
PU_CLERK   Baida                           2900         .8
PU_CLERK   Colmenares                      2500         .2
PU_CLERK   Himuro                          2600         .4
PU_CLERK   Khoo                            3100          1
PU_CLERK   Tobias                          2800         .6
PU_MAN     Raphaely                       11000          1

 


출처: 오라클 레퍼런스

원문 링크: Oracle CUME_DIST 함수 문서

 

반응형

댓글