포스팅 목차
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 수정
'오라클 게시판 > 오라클 함수' 카테고리의 다른 글
[오라클 SQL 함수] POWERMULTISET 함수 (0) | 2021.10.19 |
---|---|
【오라클(Oracle) SQL 함수】 POWER 함수 (0) | 2021.10.19 |
[오라클(Oracle) SQL 함수] PERCENT_RANK 함수 (0) | 2021.10.19 |
【오라클(Oracle) SQL 함수】 PATH 함수 (0) | 2021.10.19 |
[오라클 SQL 함수] ORA_HASH 함수 (0) | 2021.10.19 |
댓글