본문 바로가기

[오라클 레퍼런스 함수] PERCENTILE_DISC - 이산 분포 백분위수 계산

by ㅇㅍㅍ 2023. 8. 12.
[오라클 레퍼런스 함수] PERCENTILE_DISC - 이산 분포 백분위수 계산
728x90

 

 

 

PERCENTILE_DISC

 

구문

PERCENTILE_DISC(expr) WITHIN GROUP
  (ORDER BY expr [ DESC | ASC ])
  [ OVER (query_partition_clause) ]

 

참고:

OVER 절의 구문, 의미, 그리고 제한 사항에 대한 정보는 분석 함수에 대한 내용을 참조하세요.

 

목적

PERCENTILE_DISC 함수는 이산 분포 모델(discrete distribution model)을 가정하는 역분포(inverse distribution) 함수입니다. 백분위 값과 정렬 사양을 취하고 집합에서 요소를 반환합니다. 계산 과정에서 널(null)은 무시됩니다.

이 함수는 숫자 데이터 유형 또는 숫자 데이터 유형으로 암묵적으로 변환될 수 있는 비숫자 데이터 유형을 인수로 취합니다. 함수는 인수의 숫자 데이터 유형과 동일한 데이터 유형을 반환합니다.

 

참고:

암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하십시오.

 

첫 번째 표현식(expr)은 백분위 값이므로 0과 1 사이의 숫자 값으로 평가되어야 합니다. 이 표현식은 각 집계 그룹 내에서 상수여야 합니다. ORDER BY 절은 정렬 가능한 모든 유형의 단일 표현식을 취할 수 있습니다.

주어진 백분위 값 P에 대해, PERCENTILE_DISC 함수는 ORDER BY 절에서 표현식의 값을 정렬하고, 동일한 정렬 기준에 따라 P보다 크거나 같은 최소 CUME_DIST 값을 가지는 값을 반환합니다.

 

노트: PERCENTILE_DISC 함수로 대량의 데이터를 처리하기 전에, 정확한 결과보다는 근사치 결과를 더 빠르게 얻을 수 있는 다음 방법 중 하나를 사용하는 것을 고려해보십시오.
PERCENTILE_DISC 또는 ALLAPPROX_FOR_PERCENTILE 초기화 매개변수를 설정하십시오. PERCENTILE_DISC 함수를 사용하기 전에 이 매개변수에 대한 정보는 Oracle Database Reference를 참조하십시오.

PERCENTILE_DISC 함수 대신 APPROX_PERCENTILE 함수를 사용하십시오. APPROX_PERCENTILE에 대한 정보는 APPROX_PERCENTILE를 참조하십시오.

 

집계 예제

PERCENTILE_CONT의 집계 예제를 참조하세요.

 

분석 예제

다음 예제는 샘플 테이블 hr.employees의 각 직원의 급여의 중간 이산 백분위수를 계산합니다.

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)
  ORDER BY last_name, salary, department_id;

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

 

부서 30의 중앙값은 2900이며, 해당 백분위수(Cume_Dist)가 0.5보다 크거나 같은 가장 작은 값입니다. 부서 60의 중앙값은 4800이며, 해당 백분위수가 0.5보다 크거나 같은 가장 작은 값입니다.

 

 


출처: 오라클 레퍼런스

원문 링크: Oracle PERCENTILE_DISC 함수 문서

 

반응형

댓글