Skip Headers

오라클 10g 함수
10g Release 1 (10.1)
Go to Documentation Home
HOME
Go to Book List
ORA_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
ORA_10G
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

PERCENTILE_CONT

문법

MAIN

percentile_cont::=
Description of percentile_cont.gif follows

그림 설명

목적

MAIN

PERCENTILE_CONT 함수는 연속된 분포 모델을 가정한 역 분포 함수(inverse distribution function) 이다. 이 함수는 백분위수 값과 소트 지정을 취하고, 소트 지정에 해당하는 백분위수 값에 해당하는 보간된 값을 반환한다. 계산시 NULL은 무시된다.

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

처음 expr은 백분위수 값이기 때문에 0과 1사이의 수치 값으로 평가되어야 한다. 이 expr은 각 집계 그룹내에서 상수일 필요가 있다. ORDER BY구문은 오라클이 보간을 실행할수 있는 형태인 수치 또는 datetime 값을 단일 식으로 취한다.

PERCENTILE_CONT의 결과는 순서화 된 후에 값 사이에 선형 보간에 의해 계산된다. 집계 그룹안에서 백분위 값(P)과 행의 수(N)을 이용해, 소트 지정에 대해서 행을 순서화 한 후에 관심있는 행의 수를 계산한다. 이 행의 수(RN)는 계산식 RN=(1+(P*(N-1))에 따라서 계산한다. 집계 함수의 마지막 결과는 행번호 CRN=CEILING(RN)과 FRN=FLOOR(RN)의 행으로 부터 값 사이의 선형 보간에 의해 계산된다.

최종결과는 다음과 같다.

If (CRN = FRN = RN) then the result is
    (value of expression from row at RN)
  Otherwise the result is
    (CRN - RN) * (value of expression for row at FRN) +
    (RN - FRN) * (value of expression for row at CRN)
분석 함수로써 PERCENTILE_CONT함수를 이용할수 있다. OVER구문에서는 단지 query_partitioning_clause를 지정할수있다. 
각 행에 대해서 각 파티션내의 값의 세트 사이에서 지정된 백분위에 해당하는 값을 반환한다.
MEDIAN함수는 백분위 값이 기본값 0.5로 지정한 PERCENTILE_CONT의 특별한 경우이다. MEDIAN 참조.

예제

 

MAIN

집계 예제
다음 예제는 각 부서 내에서 중앙 급여를 계산한다.
SELECT department_id,
      PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) "Median cont",
      PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC) "Median disc"
FROM employees
GROUP BY department_id;

DEPARTMENT_ID Median-cont Median-disc
------------- ----------- -----------
           10        4400        4400
           20        9500       13000
           30        2850        2900
           40        6500        6500
           50        3100        3100
           60        4800        4800
           70       10000       10000
           80        8800        8800
           90       17000       17000
          100        8000        8200
          110       10150       12000
PERCENTILE_CONT와 PERCENTILE_DISC는 다른 결과를 반환할 경우기 있다. PERCENTILE_CONT는 직선 보간 후의 결과를 계산한다. 
PERCENTILE_DISC는 집계된 값의 세트로 부터 값을 반환한다. 
이 예제처럼 백분위 값이 0.5일때, PERCENTILE_CONT는 요소의 짝수를 가지는 그룹에 대해서 2개의 중앙값의 평균을 반환한다.
반면에 PERCENTILE_DISC함수는 2개의 중앙값 사이의 첫번째 값을 반환한다. 
요소의 홀수 원소를 가지는 집계 그룹에 대하여 양쪽 함수 모두 중앙 원소의 값을 반환한다.

분석 예제
다음 예제에서, 0.5의 백분위(percent_Rank)에 상응하는 부서 60의 중앙값은 4800이다. 부서 30에서 급여의 0.5 백분위가 없기 때문에, 
중앙값은 2900(백분위 0.4)와 2800(백분위 0.6)의 사이에서 보간되어서 2850으로 평가된다.
SELECT last_name, salary, department_id,
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) 
         OVER (PARTITION BY department_id) "Percentile_Cont",
       PERCENT_RANK() 
         OVER (PARTITION BY department_id ORDER BY salary DESC) "Percent_Rank"
FROM employees WHERE department_id IN (30, 60);

LAST_NAME         SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank
------------- ---------- ------------- --------------- ------------
Raphaely           11000            30            2850            0
Khoo                3100            30            2850           .2
Baida               2900            30            2850           .4
Tobias              2800            30            2850           .6
Himuro              2600            30            2850           .8
Colmenares          2500            30            2850            1
Hunold              9000            60            4800            0
Ernst               6000            60            4800          .25
Austin              4800            60            4800           .5
Pataballa           4800            60            4800           .5
Lorentz             4200            60            4800            1