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
