MEDIAN

Syntax

MEDIAN
(
  expression  IN { smallint, int, bigint,
                    real, double precision,
                    timestamp, timestamptz, time, timetz, date }
)
RETURNS median;

개요

MEDIAN 집계 함수는 그룹 내의 값들 중 중앙값(median)을 계산하여 반환하는 통계 함수입니다.

Oracle의 MEDIAN 함수를 참고하여 PostgreSQL에서 구현했습니다.

정수형, 실수형, 날짜/시간 타입 데이터 타입에 대해 사용 가능합니다.

내부적으로, MEDIAN 함수는 두 단계로 동작합니다.

집계 단계:

  • 그룹 내의 값들을 타입에 맞는 벡터(리스트 자료구조)에 수집하는 단계입니다.

  • NULL 값은 집계에서 무시됩니다.

최종 계산 단계:

  • 그룹 내 모든 값들 수집 완료 시 최종적으로 중앙 값을 산출하는 단계입니다.

  • 먼저, 집계된 벡터 내의 값들을 퀵 정렬 알고리즘으로 정렬합니다.

  • 집계된 값의 개수가 홀수인 경우 중앙 값을 반환합니다.

  • 집계된 값의 개수가 짝수인 경우 중앙의 두 값의 평균을 계산하여 반환합니다.

    • 타임존이 있는 날짜 및 시간 관련 데이터의 경우, 중앙의 두 값을 UTC로 타임존 변경 후 평균값 계산합니다.

    • UTC 기준으로 평균 값 계산 후 중앙 두 값 중 큰 값의 타임존을 채택합니다.

파라미터

파라미터
설명

expression

집계할 값으로, 아래와 같은 데이터 타입을 지원합니다. * 정수형: smallint, int, bigint

  • 실수형: real(float4), double precision

  • 날짜/시간형: timestamp, timestamptz, time, timetz, date집계 시 NULL 값은 무시되며, 각 타입에 맞는 내부 벡터에 값들이 저장됩니다.

주의사항

  • 짝수 개의 값이 집계된 경우, 중앙의 두 값의 평균이 계산되어 반환합니다.

  • 내부적으로 C 코드에서 qsort 함수를 사용하여 값들을 정렬합니다.

  • 날짜 및 시간 관련 데이터의 경우, Oracle 방식의 처리 로직에 따라 추가적인 타임존 및 형 변환 처리 진행합니다.


예제

Last updated