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

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

by 기서무나구물 2021. 10. 19.

포스팅 목차

    o PERCENTILE_DISC

     


    문 법

     

    percentile_disc::=

     


    목 적

    PERCENTILE_DISC함수는 이산 분포 모형(discrete distribution model)을 가정하는 역 분포 함수이다. 사용자가 지정한 백분위수에 해당하는 데이터 값을 검색하고, 정확하게 일치하는 데이터 값이 없으면 지정한 백분위 값의 주변 데이터 정렬 옵션에 따라 우선순위가 빠른 바로 앞의 관측치 값을 반환한다. 

    이 함수는 백분위수와 정렬 옵션에 따라 집합에서 지정한 백분위수의 바로 앞에 실제로 존재하는 해당 데이터 값을  반환한다. 계산과정 상에서 Null 값은 무시된다.

    이 함수는 인수로써 임의의 수치 데이터형 또는 암묵적으로 수치 데이터형으로 변환 가능한 비 수치 데이터형을 취한다. 함수는 인수의 수치 데이터형과 동일한 데이터형을 반환한다.

    첫번째 expr 인수는 백분위수 값이기 때문에 0~1 사이의 수치형 값으로 평가되어야 한다. 이 표현식은 각 집계 그룹 내에서 상수여야 한다. ORDER BY 절은 정렬 가능한 모든 유형의 단일 표현식을 지정해야 한다.

    주어진 백분위수 값 P에 대해서, PERCENTILE_DISC 함수는 ORDER BY 절에서 지정한 표현식의 값을 정렬하여서, (동일한 정렬 지정에 따라)  P 이상인 값 중에서 최소(가장 작은) CUME_DIST 값을 가지는 값을 반환한다.

     

    - INVERSE PERCENTILE FUNCTION

    CUME_DIST 함수를 이용하여 데이터 집합에서 해당 관측치 값의 위치를 계산할 수 있었으나 역산 (특정한 백분위수의 값을 발견하는)은 어렵거나 효과적인 연산이 수행되지는 않습니다. 이 문제를 극복하기 위하여 PERCENTILE_CONT 와 PERCENTILE_DISC 함수 같은 역 분포 함수를 제공한다. PERCENTILE_CONT 함수는 연속 분포 (Continuous Distribution)를 가정한 역 분포 함수이고, PERCENTILE_DISC 함수는 이산 분포(Discrete Distribution)를 가정한 역 분포 함수이다.

     


    함수 비교

    • PERCENTILE_CONT 함수는 데이터 세트에 있거나 없을 수 있는 적절한 값을 보간법을 사용하여서 계산하는 반면, PERCENTILE_DISC 함수는 항상 해당 세트에서 백분위수 바로 앞에 실제로 존재하는 값을 반환합니다. 데이터 계수가 짝수인 경우 반환하는 값이 차이가 날 수 있다.
    • PERCENTILE_CONT 함수 : 입력받은 수치 값이 어느 두 값의 사이일 경우 두 값의 사이에서 계산된 값을 반환한다.
    • PERCENTILE_DISC 함수 : 입력받은 수치 값이 어느 두 값의 사이일 경우 다른 계산과정 없이 작은 값을 그대로 반환한다.

     


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

     


    관련 함수

    함수명 함수내용
    MEDIAN
    연속된 분산 모델을 가정한 역 분포 함수이다. 이 함수는 수치형 데이터 또는 일자(Date)에 대한 중앙값 또는 값의 정렬 후에 보간법을 사용하여 중앙값을 계산하여 반환한다.
    PERCENT_RANK
    인수로 지정한 값의 그룹 내의 위치를 나타내는 백분위 순위(순위 퍼센트, Percent rank)를 반환한다.
    PERCENTILE_CONT 연속된 분포 모델을 가정하여 인수로 지정한 백분위 값에 해당하는 값을 계산하는 역 분포 함수(inverse distribution function)이다.
    PERCENTILE_DISC 이산 분포 모형을 가정하는 역 분포 함수이다. 사용자가 지정한 백분위수에 해당하는 데이터 값을 검색하고, 정확하게 일치하는 데이터 값이 없으면 지정한 백분위 값의 주변 데이터 정렬 옵션에 따라 우선순위가 빠른 바로 앞의 관측치 값을 반환한다. 

     


    예 제

     

    집계 예제

    PERCENTILE_CONT 함수 예제 참조.

     


    분석 예제

    다음 예제는 샘플 테이블 hr.employess에서 각 직원의 급여의 이산 중앙값(0.5) 백분위수 값을 계산한다.

    부서 30에서 해당하는 백분위수(Cume_Dist)가 0.5 이상인 값 중에서 최솟값을 가지는 중앙값은 2900이다. 부서 60에서 해당하는 백분위수(Cume_Dist)가 0.5 이상인 값 중에서 최솟값을 가지는 중앙값은 4800이다.

    Oracle Program
    SELECT last_name, salary, department_id,
           PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC)
                                OVER (PARTITION BY department_id) "Percentile_Disc",
           CUME_DIST() OVER (PARTITION BY department_id 
                             ORDER     BY salary DESC) "Cume_Dist"
    FROM   employees where department_id in (30, 60);

     

    Results
    LAST_NAME         SALARY DEPARTMENT_ID Percentile_Disc  Cume_Dist
    ------------- ---------- ------------- --------------- ----------
    Raphaely           11000            30            2900 .166666667
    Khoo                3100            30            2900 .333333333
    Baida               2900            30            2900         .5
    Tobias              2800            30            2900 .666666667
    Himuro              2600            30            2900 .833333333
    Colmenares          2500            30            2900          1
    Hunold              9000            60            4800         .2
    Ernst               6000            60            4800         .4
    Austin              4800            60            4800         .8
    Pataballa           4800            60            4800         .8
    Lorentz             4200            60            4800          1

     


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

     

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

    2023.12 수정

    반응형

    댓글