MEDIAN 함수
값 범위의 중앙값을 계산합니다. 범위의 NULL
값은 무시됩니다.
MEDIAN은 연속 분포 모델을 가정하는 역분포 함수입니다.
MEDIAN은 PERCENTILE_CONT의 특별 사례입니다.
구문
MEDIAN(median_expression)
인수
- median_expression
-
함수가 실행되는 대상 열 또는 표현식입니다.
데이터 타입
반환 형식은 median_expression의 형식에 따라 결정됩니다. 다음 표는 각 median_expression 데이터 형식에 따른 반환 형식을 나타낸 것입니다.
입력 유형 | 반환 타입 |
---|---|
INT2 , INT4 , INT8 , NUMERIC , DECIMAL |
DECIMAL |
FLOAT , DOUBLE |
DOUBLE |
DATE |
DATE |
TIMESTAMP |
TIMESTAMP |
TIMESTAMPTZ |
TIMESTAMPTZ |
사용 노트
median_expression 인수가 최대 정밀도가 38자리로 정의된 DECIMAL
데이터 형식인 경우에는 MEDIAN이 부정확한 결과 또는 오류를 반환합니다. MEDIAN 함수의 반환 값이 38자리를 초과하면 정밀도가 손실될 수도 있기 때문에 알맞은 자리 수로 결과가 잘립니다. 보간 도중 중간 결과가 최대 정밀도를 초과하면 수치 오버플로우가 발생하고 함수는 오류를 반환합니다. 이러한 상황을 방지하려면 정밀도가 낮은 데이터 형식을 사용하거나, 혹은 median_expression 인수를 낮은 정밀도로 변환합니다.
하나의 문에서 정렬 기반 집계 함수(LISTAGG, PERCENTILE_CONT, MEDIAN)를 여러 차례 호출하는 경우에는 모두 동일한 ORDER BY 값을 사용해야 합니다. 단, MEDIAN은 표현식 값에서 묵시적인 ORDER BY를 적용합니다.
예를 들어 다음과 같은 문은 오류를 반환합니다.
SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(pricepaid) FROM sales GROUP BY salesid, pricepaid;
An error occurred when executing the SQL command: SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(pricepaid) FROM sales GROUP BY salesid, pricepaid; ERROR: within group ORDER BY clauses for aggregate functions must be the same
다음 문은 성공적으로 실행됩니다.
SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(salesid) FROM sales GROUP BY salesid, pricepaid;
예시
다음 예제에서는 TICKIT 샘플 데이터베이스를 사용합니다. 자세한 내용은 샘플 데이터베이스 단원을 참조하십시오.
다음은 MEDIAN이 PERCENTILE_CONT(0.5)와 동일한 결과를 산출하는 예입니다.
SELECT TOP 10 DISTINCT sellerid, qtysold, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold), MEDIAN(qtysold) FROM sales GROUP BY sellerid, qtysold;
+----------+---------+-----------------+--------+ | sellerid | qtysold | percentile_cont | median | +----------+---------+-----------------+--------+ | 2 | 2 | 2 | 2 | | 26 | 1 | 1 | 1 | | 33 | 1 | 1 | 1 | | 38 | 1 | 1 | 1 | | 43 | 1 | 1 | 1 | | 48 | 2 | 2 | 2 | | 48 | 3 | 3 | 3 | | 77 | 4 | 4 | 4 | | 85 | 4 | 4 | 4 | | 95 | 2 | 2 | 2 | +----------+---------+-----------------+--------+
다음 예제에서는 각 sellerid의 판매 수량 중간값을 찾습니다.
SELECT sellerid, MEDIAN(qtysold) FROM sales GROUP BY sellerid ORDER BY sellerid LIMIT 10;
+----------+--------+ | sellerid | median | +----------+--------+ | 1 | 1.5 | | 2 | 2 | | 3 | 2 | | 4 | 2 | | 5 | 1 | | 6 | 1 | | 7 | 1.5 | | 8 | 1 | | 9 | 4 | | 12 | 2 | +----------+--------+
첫 번째 sellerid에 대한 이전 쿼리 결과를 확인하려면 다음 예제를 사용합니다.
SELECT qtysold FROM sales WHERE sellerid=1;
+---------+ | qtysold | +---------+ | 2 | | 1 | +---------+