PERCENTILE_CONT
구문
PERCENTILE_CONT(expr) WITHIN GROUP
(ORDER BY expr [ DESC | ASC ])
[ OVER (query_partition_clause) ]
참고:
OVER 절의 구문, 의미, 그리고 제한 사항에 대한 정보는 분석 함수에 대한 내용을 참조하세요.
목적
PERCENTILE_CONT는 연속적인 분포 모델을 가정한 역분포 함수입니다. 백분위 값을 가져오고 정렬 명세(sort specification)를 지정한 다음 해당 백분위 값에 따라 정렬 명세와 관련하여 보간된 값(interpolated value)을 반환합니다. 계산 시 NULL 값은 무시됩니다.
이 함수는 숫자 데이터 유형이나 숫자 데이터 유형으로 암묵적으로 변환될 수 있는 비숫자 데이터 유형을 인수로 사용합니다. 함수는 인수의 숫자 데이터 유형과 동일한 데이터 유형을 반환합니다.
참고:
암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하십시오.
첫 번째 expr은 백분위 값을 나타내는 0과 1 사이의 숫자 값으로 평가되어야 합니다. 이 expr은 각 집계 그룹 내에서 상수여야 합니다. ORDER BY 절은 하나의 표현식을 가져야 하며 숫자나 날짜/시간 값이어야 합니다. 이는 Oracle이 보간을 수행할 수 있는 유형입니다.
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을 참조하십시오.
노트: PERCENTILE_CONT 함수로 대량의 데이터를 처리하기 전에, 정확한 결과보다 빠르게 근사 결과를 얻기 위해 다음 중 하나의 방법을 사용하는 것을 고려해보세요:
• PERCENTILE_CONT 함수를 사용하기 전에 APPROX_FOR_PERCENTILE 초기화 매개변수를 PERCENTILE_CONT 또는 ALL로 설정합니다. 이 매개변수에 대한 자세한 내용은 Oracle Database Reference 문서를 참조하세요.
• PERCENTILE_CONT 함수 대신 APPROX_PERCENTILE 함수를 사용하세요. APPROX_PERCENTILE에 대해서는 참조하세요.
집계 예제
다음 예제는 각 부서의 중앙값 급여를 계산합니다:
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
ORDER 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 8900 9000
90 17000 17000
100 8000 8200
110 10154 12008
7000 7000
PERCENTILE_CONT와 PERCENTILE_DISC는 서로 다른 결과를 반환할 수 있습니다. PERCENTILE_CONT는 선형 보간을 수행한 후 계산된 결과를 반환합니다. 반면에 PERCENTILE_DISC는 집계된 값 집합 중 하나의 값을 반환합니다. 이 예제에서와 같이 백분위 값이 0.5인 경우, PERCENTILE_CONT는 원소 수가 짝수인 그룹의 경우 두 가운데 값의 평균을 반환하지만, PERCENTILE_DISC는 그 두 가운데 값 중 첫 번째 값을 반환합니다. 원소 수가 홀수인 집계 그룹의 경우, 두 함수 모두 중간 원소 값을 반환합니다.
분석 예제
다음 예제에서, 부서 60의 중간값은 4800이며, 해당 백분위수 (Percent_Rank)는 0.5입니다. 그러나 부서 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)
ORDER BY last_name, salary, department_id;
LAST_NAME SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank
------------------------- ---------- ------------- --------------- ------------
Austin 4800 60 4800 .5
Baida 2900 30 2850 .4
Colmenares 2500 30 2850 1
Ernst 6000 60 4800 .25
Himuro 2600 30 2850 .8
Hunold 9000 60 4800 0
Khoo 3100 30 2850 .2
Lorentz 4200 60 4800 1
Pataballa 4800 60 4800 .5
Raphaely 11000 30 2850 0
Tobias 2800 30 2850 .6
출처: 오라클 레퍼런스
원문 링크: Oracle PERCENTILE_CONT 함수 문서
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] POWER - n제곱 계산 (0) | 2023.08.12 |
---|---|
[오라클 레퍼런스 함수] PERCENTILE_DISC - 이산 분포 백분위수 계산 (0) | 2023.08.12 |
[오라클 레퍼런스 함수] PERCENT_RANK - 백분율 순위 계산 (0) | 2023.08.12 |
[오라클 레퍼런스 함수] PATH - 상대 경로 반환 (0) | 2023.08.12 |
[오라클 레퍼런스 함수] ORA_INVOKING_USERID - 호출한 데이터베이스 사용자의 식별자(identifier) 반환 (0) | 2023.08.11 |
댓글