중앙 분리대 (Transact-SQL)

적용 대상:Microsoft Fabric의 SQL 분석 엔드포인트 및 Microsoft Fabric의 웨어하우스

MEDIAN 이 기능은 비NULL수치 값의 정확한 중앙값, 즉 50번째 백분위수를 반환합니다. 집계 함수와 창(분석) 함수로 사용할 수 있습니다.

  • 집계 사용: 전체 그룹의 중앙값을 반환합니다.
  • 윈도우 사용: 각 파티션의 중앙값을 반환하면서 행 단위 출력은 유지합니다.

Transact-SQL 구문 표기 규칙

Syntax

집계 함수 구문:

MEDIAN ( numeric_expression )

분석 함수 구문:

MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )

Arguments

numeric_expression

중앙값이 계산되는 수치식입니다. 지원되는 정확한 숫자 유형은 int, numericsmallintbigintdecimalbittinyintsmallmoney입니다.money 지원되는 근사 수치 유형은 float 와 real입니다.

OVER 절

partition_by_clause 절에서 생성된 결과 집합을 FROM 파티션으로 나누고 함수가 각 파티션에 적용됩니다.

partition_by_clause 지정하지 않으면, 함수는 쿼리 결과 집합의 모든 행을 하나의 파티션으로 처리합니다.

이 절은 OVER , ROWS, 또는 RANGE 에 대해 MEDIAN지지ORDER BY하지 않는다.

자세한 내용은 SELECT - OVER 절(Transact-SQL)을 참조하세요.

반환 형식

float(53)을(를) 반환합니다.

비고

MEDIAN 순서가 정해진 비NULL 입력 값의 연속된 50번째 백분위수를 계산합니다. 짝수 입력값에 대해서는 두 중간 값 사이를 보간합니다. 결과가 입력 행에 존재하는 값이 아닐 수도 있습니다.

MEDIAN 이는 집계 사용에 대해 와 PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY numeric_expression) 동등합니다. 분석형은 각 분할 내에서 동등한 백분위수 연속 의미론을 가진다.

NULL 값은 무시됩니다. 모든 입력값이 이거나 NULL열이 없으면 를 반환NULL합니다MEDIAN. ANSI_WARNINGS 가 일 ON때, 값을 제거하면 NULL 표준 집계 경고가 생성됩니다.

MEDIAN 비결정적인데, 병렬 실행 경로에서의 부동소수점 계산은 약간의 변동을 일으킬 수 있기 때문입니다. 자세한 내용은 결정적 함수와 비결정적 함수를 참조하세요.

DISTINCT는 지원되지 않습니다. 문자, 날짜, 시간, 날짜 시간 표현은 지원되지 않습니다.

MEDIAN 이 기능은 Fabric Data Warehouse와 Fabric 항목의 SQL 분석 엔드포인트에서 제공됩니다. 이 MEDIAN 함수는 SQL Server, Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스에서 지원되지 않습니다.

사용 사례

평균이 비정상적으로 높거나 낮은 값으로 왜곡될 수 있을 때 사용됩니다 MEDIAN . 예를 들어, 중앙값 주문값, 응답 시간, 청구 금액은 산술 평균보다 더 명확하게 전형적인 관찰을 나타내는 경우가 많습니다. 집계 형태는 그룹을 요약하고, 분석적 형태는 각 세부 행에 분할 벤치마크를 추가합니다.

Examples

A. 총합 중앙값을 계산합니다

이 예시는 8개의 중앙값 값을 반환합니다. 입력이 짝수 행 MEDIAN 이기 때문에 4행과 5행 사이를 보간합니다.

SELECT MEDIAN(value) AS MedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);

결과는 4.5입니다.

B. 각 그룹의 중앙값을 계산하세요

이 예시는 각 판매 지역의 중간 주문 금액을 계산합니다.

WITH SalesOrders AS (
    SELECT *
    FROM (VALUES
        ('North', 120.00),
        ('North', 220.00),
        ('North', 320.00),
        ('South', 150.00),
        ('South', 250.00),
        ('South', 450.00)
    ) AS v(region, order_amount)
)
SELECT
    region,
    MEDIAN(order_amount) AS MedianOrderAmount
FROM SalesOrders
GROUP BY region;

C. NULL 값은 무시하세요

이 예시는 입력을 NULL 무시하고 나머지 값들로부터 중앙값을 계산합니다.

SELECT MEDIAN(value) AS MedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);

모든 입력값이 이면 NULL, 함수는 를 반환합니다 NULL.

D. 분할된 창 중앙값을 계산합니다

이 예시는 각 서비스의 중간 지연 시간을 각 요청 행에 더합니다.

WITH ServiceLatency AS (
    SELECT *
    FROM (VALUES
        ('Checkout', 'req-001', 180),
        ('Checkout', 'req-002', 220),
        ('Checkout', 'req-003', 260),
        ('Search', 'req-010', 90),
        ('Search', 'req-011', 110),
        ('Search', 'req-012', 130)
    ) AS v(service, request_id, latency_ms)
)
SELECT
    service,
    request_id,
    latency_ms,
    MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceMedianLatency
FROM ServiceLatency;