본문 바로가기
오라클 게시판/오라클 함수

【오라클(Oracle) SQL 함수】 CUME_DIST 함수

by 기서무나구물 2018. 11. 15.

포스팅 목차

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

    o CUME_DIST

     


    문 법

     

    • 집계 문법

    cume_dist_aggregate::=

     

    • 분석 문법


    cume_dist_analytic::=


    목 적

    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;

     


    패키지 함수 비교(Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table)

     


    관련 함수

    함수명 함수내용
    CUME_DIST 그룹에 존재하는 관측치의 누적 분포 값을 계산한다.
    DENSE_RANK Rank()와 유사한 함수로 각 그룹별로 ORDER BY절에 사용된 칼럼이나 표현식을 기준으로 정렬하고, 그룹 내의 각 열에 대한 순위를 부여한다. 
    PERCENT_RANK 인수로 지정한 값의 그룹 내의 위치를 나타내는 백분위 순위(순위 퍼센트, Percent rank)를 반환한다.
    RANK 값의 그룹에서 값의 순위를 계산한다. 반환되는 데이터형은 NUMBER이다.
    ROW_NUMBER
    파티션 그룹별 또는 전체 데이터에 대하여 order_by_clause에서 지정된 행의 정렬 순위대로 1로 시작하는 중복을 허용하지 않는 유일한(unique) 순서 값을 할당한다. (파티션에서 각 행 또는 쿼리에 의해서 반환되는 각 행에 대하여)

     


    예제

    • 집계 함수 예제

    다음 예제는 oe.employees테이블에서 종업원 중에서 급여가 15,500달러이고, 수수료가 5%인 종업원의 누적 분포를 계산한다.

    Oracle Program
    SELECT CUME_DIST(15500, .05) WITHIN GROUP
       (ORDER BY salary, commission_pct) "Cume-Dist of 15500" 
       FROM employees;

     

    Results
    Cume-Dist of 15500
    ------------------
            .972222222

     


    • 분석 함수 예제

    다음 예제는 구매 부분의 각 종업원의 급여 퍼센트를 계산한다. 예를 들어, 종업원의 40%가 Himuro의 급여 이하의 급여를 받는 것을 알 수 있다.

    Oracle Program
    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%';

     

    Results
    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

     

      --------------------------------------------  

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크
    반응형

    댓글