본문 바로가기

[오라클 레퍼런스 함수] MEDIAN - 숫자나 날짜 시간의 중간 값 반환

by ㅇㅍㅍ 2023. 8. 9.
[오라클 레퍼런스 함수] MEDIAN - 숫자나 날짜 시간의 중간 값 반환
728x90

 

 

MEDIAN

 

구문

MEDIAN(expr) [ OVER (query_partition_clause) ]

 

참고:

구문, 의미, 그리고 제한 사항에 대한 정보는 "Analytic Functions"에 대한 내용을 참조하세요.

 

목적

MEDIAN는 연속 분포 모델을 가정하는 역분포 함수입니다. 숫자나 날짜 시간 값을 가져와 값을 정렬한 후 가운데 값 또는 중간 값이 될 보간된 값을 반환합니다. 계산 시 널(null) 값은 무시됩니다.

이 함수는 어떤 숫자 데이터 유형이든 또는 숫자 데이터 유형으로 암시적으로 변환될 수 있는 어떤 비숫자 데이터 유형이든 인수로 사용할 수 있습니다. expr만 지정하면 함수는 인수의 숫자 데이터 유형과 동일한 데이터 유형을 반환합니다. OVER 절을 지정하면 Oracle Database는 가장 높은 숫자 우선순위를 갖는 인수를 결정하고, 나머지 인수를 해당 데이터 유형으로 암시적으로 변환한 후 해당 데이터 유형을 반환합니다.

 

참고:

  • 암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하시고, 숫자 우선순위에 대한 정보는 "Numeric Precedence"를(을) 참조하십시오.
  • Oracle Database Globalization Support Guide의 부록 C는 INSTR 함수가 substring 인수를 string의 부분 문자열과 비교하는 데 사용하는 정렬(collation) 결정 규칙에 대한 정보를 제공합니다.

 

MEDIAN 함수의 결과는 먼저 행들을 정렬하여 계산됩니다. 그룹 내의 행 수를 N으로 사용할 때, Oracle은 관심 있는 행 번호(RN)를 다음의 공식을 사용하여 계산합니다: RN = (1 + (0.5*(N-1)). 집계 함수의 최종 결과는 행 번호 CRN = CEILING(RN)FRN = FLOOR(RN)의 행들의 값 사이에서 선형 보간으로 계산됩니다.

최종 결과는 다음과 같습니다:

   if (CRN = FRN = RN) then
      (value of expression from row at RN)
   else
      (CRN - RN) * (value of expression for row at FRN) +
      (RN - FRN) * (value of expression for row at CRN)

 

MEDIAN 함수는 분석 함수로 사용할 수 있습니다. OVER 절에서는 query_partition_clause만 지정할 수 있습니다. 각 행에 대해, 파티션 내의 값 집합 중 중간에 위치하는 값을 반환합니다.

이 함수를 다음 함수들과 비교해보세요:

  • PERCENTILE_CONT: 선형 보간을 통해 특정 백분위수에 해당하는 값을 반환합니다. MEDIAN은 백분위수 값이 기본적으로 0.5인 PERCENTILE_CONT의 특수한 경우입니다.
  • PERCENTILE_DISC: 보간 없이 주어진 백분위수에 해당하는 값을 찾는 데 유용합니다.

 

집계 예시

다음 쿼리는 hr.employees 테이블에서 각 부서의 중간 급여를 반환합니다:

SELECT department_id, MEDIAN(salary)
  FROM employees
  GROUP BY department_id
  ORDER BY department_id;

DEPARTMENT_ID MEDIAN(SALARY)
------------- --------------
           10           4400
           20           9500
           30           2850
           40           6500
           50           3100
           60           4800
           70          10000
           80           8900
           90          17000
          100           8000
          110          10154
                        7000

 

분석 예시

다음 쿼리는 hr.employees 테이블의 일부 부서에서 각 매니저의 중간 급여를 반환합니다:

SELECT manager_id, employee_id, salary,
       MEDIAN(salary) OVER (PARTITION BY manager_id) "Median by Mgr"
  FROM employees
  WHERE department_id > 60
  ORDER BY manager_id, employee_id;

MANAGER_ID EMPLOYEE_ID     SALARY Median by Mgr
---------- ----------- ---------- -------------
       100         101      17000         13500
       100         102      17000         13500
       100         145      14000         13500
       100         146      13500         13500
       100         147      12000         13500
       100         148      11000         13500
       100         149      10500         13500
       101         108      12008         12008
       101         204      10000         12008
       101         205      12008         12008
       108         109       9000          7800
       108         110       8200          7800
       108         111       7700          7800
       108         112       7800          7800
       108         113       6900          7800
       145         150      10000          8500
       145         151       9500          8500
       145         152       9000          8500
. . .

 


출처: 오라클 레퍼런스

원문 링크: Oracle MEDIAN 함수 문서

 

반응형

댓글