본문 바로가기

[오라클 레퍼런스 함수] APPROX_PERCENTILE - 근사 백분위수 계산

by ㅇㅍㅍ 2023. 7. 30.
[오라클 레퍼런스 함수] APPROX_PERCENTILE - 근사 백분위수 계산
728x90

APPROX_PERCENTILE

 

구문

APPROX_PERCENTILE( expr [ DETERMINISTIC ] [, { 'ERROR_RATE' | 'CONFIDENCE' } ] )
WITHIN GROUP ( ORDER BY expr [ DESC | ASC ] )

 

목적

APPROX_PERCENTILE 함수는 대략적인 역분포 함수입니다. 백분위수 값과 정렬 기준을 입력받아 해당 백분위수 값에 해당하는 값을 반환합니다. 계산 시 NULL 값은 무시됩니다.

이 함수는 PERCENTILE_CONTPERCENTILE_DISC 함수의 대안으로 제공되며, 정확한 결과를 반환합니다. APPROX_PERCENTILE 함수는 대량의 데이터를 처리할 때 PERCENTILE_CONTPERCENTILE_DISC 함수에 비해 상당히 빠르며, 정확한 결과와 미미한 오차를 제공합니다.

첫 번째 expr은 백분위수 값을 나타내며, 0과 1 사이의 숫자 값으로 평가되어야 합니다.

두 번째 exprORDER 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입니다.

 

참고:

 

예제

다음 쿼리는 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 값을 추정하는 것이 하나의 보간법입니다. 또 다른 보간법으로는 다항식 보간법이 있으며, 이 경우 데이터 포인트들을 지나는 곡선 형태의 다항식을 사용하여 추정값을 계산합니다.

이러한 보간법은 데이터 포인트들 간의 관계를 파악하고, 빠진 값이나 새로운 값을 추정하는 데 유용하게 사용됩니다. 보간법은 주로 데이터 분석, 그래픽 처리, 신호 처리, 공학 등 다양한 분야에서 사용되며, 데이터를 부드럽게 연결하거나 빠진 데이터를 채우는 데 활용됩니다.

 

반응형

댓글