APPROX_PERCENTILE
구문
APPROX_PERCENTILE( expr [ DETERMINISTIC ] [, { 'ERROR_RATE' | 'CONFIDENCE' } ] )
WITHIN GROUP ( ORDER BY expr [ DESC | ASC ] )
목적
APPROX_PERCENTILE 함수는 대략적인 역분포 함수입니다. 백분위수 값과 정렬 기준을 입력받아 해당 백분위수 값에 해당하는 값을 반환합니다. 계산 시 NULL 값은 무시됩니다.
이 함수는 PERCENTILE_CONT 및 PERCENTILE_DISC 함수의 대안으로 제공되며, 정확한 결과를 반환합니다. APPROX_PERCENTILE 함수는 대량의 데이터를 처리할 때 PERCENTILE_CONT 및 PERCENTILE_DISC 함수에 비해 상당히 빠르며, 정확한 결과와 미미한 오차를 제공합니다.
첫 번째 expr은 백분위수 값을 나타내며, 0과 1 사이의 숫자 값으로 평가되어야 합니다.
두 번째 expr은 ORDER BY 절의 일부로 사용되며, 이 함수가 결과를 계산하는 단일 표현식입니다. expr에 대해 허용되는 데이터 유형 및 이 함수의 반환 값 데이터 유형은 DETERMINISTIC 절로 지정한 알고리즘에 따라 달라집니다.
DETERMINISTIC
이 절은 함수가 반환 값을 계산하는 데 사용하는 알고리즘의 유형을 지정하는 데 사용됩니다.
- DETERMINISTIC을 지정하면 이 함수는 결정론적인 결과를 계산합니다. 이 경우 ORDER BY 절 표현식은 숫자 값으로 평가되어야 하며, -2,147,483,648부터 2,147,483,647까지의 범위 내에서 암묵적으로 숫자 값으로 변환될 수 있는 값이어야 합니다. 함수는 숫자 입력을 가장 가까운 정수로 반올림합니다. 함수는 ORDER BY 절 표현식의 숫자 데이터 유형과 동일한 데이터 유형을 반환합니다. 반환 값은 반드시 expr의 값 중 하나일 필요는 없습니다.
- DETERMINISTIC을 생략하면 이 함수는 결정론적이지 않은 결과를 계산합니다. 이 경우 ORDER BY 절 표현식은 숫자 또는 날짜/시간 값으로 평가되어야 하며, 숫자 또는 날짜/시간 값으로 암묵적으로 변환될 수 있는 값이어야 합니다. 함수는 ORDER BY 절 표현식의 숫자 또는 날짜/시간 데이터 유형과 동일한 데이터 유형을 반환합니다. 반환 값은 expr의 값 중 하나입니다.
ERROR_RATE | CONFIDENCE
이 절은 이 함수가 계산한 결과의 정확성을 결정하는 데 사용되는 절입니다. 이러한 절 중 하나를 지정하면 함수는 expr에 대해 지정된 백분위 값에 해당하는 값을 반환하는 대신, 0부터 1까지(포함)의 소수 값을 반환합니다. 이 값은 다음과 같은 의미를 갖습니다:
- ERROR_RATE를 지정하면 반환 값은 expr에 대해 지정된 백분위 값에 해당하는 값을 계산하는 데 사용되는 오차율을 나타냅니다.
- CONFIDENCE를 지정하면 반환 값은 ERROR_RATE를 지정할 때 반환되는 오차율에 대한 신뢰 수준을 나타냅니다.
DESC | ASC
지정된 백분위 값에 해당하는 값을 계산하기 위해 정렬 사양을 지정합니다. ORDER BY 절 표현식 값을 내림차순으로 정렬하려면 DESC를 지정하고, 오름차순으로 정렬하려면 ASC를 지정합니다. 기본값은 ASC입니다.
참고:
- PERCENTILE_CONT 및 PERCENTILE_DISC
- APPROX_PERCENTILE의 특수한 경우인 APPROX_MEDIAN, 이 경우 백분위 값은 0.5입니다.
예제
다음 쿼리는 hr.employees 테이블의 각 부서에 대해 결정론적인 근사치로 25번째 백분위 수, 50번째 백분위 수, 그리고 75번째 백분위 수의 급여를 반환합니다. 급여는 보간 계산을 위해 오름차순으로 정렬되어 있습니다.
SELECT department_id "Department",
APPROX_PERCENTILE(0.25 DETERMINISTIC)
WITHIN GROUP (ORDER BY salary ASC) "25th Percentile Salary",
APPROX_PERCENTILE(0.50 DETERMINISTIC)
WITHIN GROUP (ORDER BY salary ASC) "50th Percentile Salary",
APPROX_PERCENTILE(0.75 DETERMINISTIC)
WITHIN GROUP (ORDER BY salary ASC) "75th Percentile Salary"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department 25th Percentile Salary 50th Percentile Salary 75th Percentile Salary
---------- ---------------------- ---------------------- ----------------------
10 4400 4400 4400
20 6000 6000 13000
30 2633 2765 3100
40 6500 6500 6500
50 2600 3100 3599
60 4800 4800 6000
70 10000 10000 10000
80 7400 9003 10291
90 17000 17000 24000
100 7698 7739 8976
110 8300 8300 12006
7000 7000 7000
다음 쿼리는 이전 쿼리에서 계산된 근사 25번째 백분위 수의 급여에 대한 오류율을 반환합니다:
SELECT department_id "Department",
APPROX_PERCENTILE(0.25 DETERMINISTIC, 'ERROR_RATE')
WITHIN GROUP (ORDER BY salary ASC) "Error Rate"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department Error Rate
---------- ----------
10 .002718282
20 .021746255
30 .021746255
40 .002718282
50 .019027973
60 .019027973
70 .002718282
80 .021746255
90 .021746255
100 .019027973
110 .019027973
.002718282
다음 쿼리는 이전 쿼리에서 계산된 오류율에 대한 신뢰 수준을 반환합니다:
SELECT department_id "Department",
APPROX_PERCENTILE(0.25 DETERMINISTIC, 'CONFIDENCE')
WITHIN GROUP (ORDER BY salary ASC) "Confidence"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department Confidence
---------- ----------
10 .997281718
20 .999660215
30 .999660215
40 .997281718
50 .999611674
60 .999611674
70 .997281718
80 .999660215
90 .999660215
100 .999611674
110 .999611674
.997281718
다음 쿼리는 hr.employees 테이블의 각 부서에 대해 비결정적인 근사치로 25번째, 50번째 및 75번째 백분위수의 급여를 반환합니다. 급여는 보간 계산을 위해 오름차순으로 정렬됩니다.
SELECT department_id "Department",
APPROX_PERCENTILE(0.25)
WITHIN GROUP (ORDER BY salary ASC) "25th Percentile Salary",
APPROX_PERCENTILE(0.50)
WITHIN GROUP (ORDER BY salary ASC) "50th Percentile Salary",
APPROX_PERCENTILE(0.75)
WITHIN GROUP (ORDER BY salary ASC) "75th Percentile Salary"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department 25th Percentile Salary 50th Percentile Salary 75th Percentile Salary
---------- ---------------------- ---------------------- ----------------------
10 4400 4400 4400
20 6000 6000 13000
30 2600 2800 3100
40 6500 6500 6500
50 2600 3100 3600
60 4800 4800 6000
70 10000 10000 10000
80 7300 8800 10000
90 17000 17000 24000
100 7700 7800 9000
110 8300 8300 12008
7000 7000 7000
출처: 오라클 레퍼런스
원문 링크: Oracle APPROX_PERCENTILE 함수 문서
💡 Tip!
Interpolation(보간법)은 주어진 데이터 포인트들의 사이에 위치하는 값을 추정하는 방법입니다. 데이터 포인트들이 주어졌을 때, 두 데이터 포인트 사이의 값을 추정하거나 더 많은 데이터 포인트들을 사용하여 빠진 값을 대체하는데 사용됩니다.
예를 들어, 주어진 데이터 포인트가 (x1, y1)과 (x2, y2)라고 할 때, 이 두 점을 지나는 직선을 이용하여 x1과 x2 사이의 다른 x 값에 대응하는 y 값을 추정하는 것이 하나의 보간법입니다. 또 다른 보간법으로는 다항식 보간법이 있으며, 이 경우 데이터 포인트들을 지나는 곡선 형태의 다항식을 사용하여 추정값을 계산합니다.
이러한 보간법은 데이터 포인트들 간의 관계를 파악하고, 빠진 값이나 새로운 값을 추정하는 데 유용하게 사용됩니다. 보간법은 주로 데이터 분석, 그래픽 처리, 신호 처리, 공학 등 다양한 분야에서 사용되며, 데이터를 부드럽게 연결하거나 빠진 데이터를 채우는 데 활용됩니다.
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] APPROX_PERCENTILE_DETAIL - 근사 백분위수 정보 계산 (0) | 2023.07.30 |
---|---|
[오라클 레퍼런스 함수] APPROX_PERCENTILE_AGG - 근사 백분위수 정보 집계 (0) | 2023.07.30 |
[오라클 레퍼런스 함수] APPROX_MEDIAN - 대략적인 중앙값 계산 (0) | 2023.07.30 |
[오라클 레퍼런스 함수] APPROX_COUNT_DISTINCT_DETAIL - 근사치로 고유값 수 계산 (0) | 2023.07.30 |
[오라클 레퍼런스 함수] APPROX_COUNT_DISTINCT_AGG - 근사 중복 행 수 집계 (0) | 2023.07.29 |
댓글