APPROX_MEDIAN (Transact-SQL)

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

이 함수는 APPROX_MEDIAN 비수치 값의NULL 대략적인 중앙값, 즉 50번째 백분위수를 반환합니다. 집계 함수와 창(분석) 함수로 사용할 수 있습니다.

  • 집계 사용량: 전체 그룹의 대략적인 중앙값을 반환합니다.
  • 윈도우 사용: 각 파티션에 대해 대략적인 중앙값을 반환하면서 행 단위 출력을 보존합니다.

Transact-SQL 구문 표기 규칙

문법

집계 함수 구문:

APPROX_MEDIAN ( numeric_expression )

분석 함수 구문:

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

Arguments

numeric_expression

중앙값이 대략 계산되는 수치식입니다. 지원되는 정확한 숫자 유형은 int, numericbiginttinyintdecimalsmallintsmallmoney그리고 money있습니다. 지원되는 근사 수치 유형은 float 와 real입니다.

OVER 절

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

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

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

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

반환 형식

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

비고

APPROX_MEDIAN 순서된 비NULL 입력 값의 연속된 50번째 백분위수를 추정합니다. 정확한 결과가 필요할 때는 MEDIAN(중간수) 을 사용하세요.

근사적인 결과는 정확한 MEDIAN 결과와 약간 다를 수 있으며, 실행 계획과 병렬 병합 경로 때문에 실행마다 다를 수 있습니다. APPROX_MEDIAN는 비결정적입니다. 자세한 내용은 결정적 함수와 비결정적 함수를 참조하세요.

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

APPROX_MEDIAN 이는 대규모 데이터셋에서의 정확한 MEDIAN 계산에 비해 지연 시간과 메모리 사용을 줄이기 위한 것입니다.

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

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

사용 사례

대규모 대시보드, 탐색적 분석, 그리고 정확한 중앙값보다 쿼리 성능이 더 중요한 경우 그룹 보고에 사용됩니다 APPROX_MEDIAN . 일반적인 예로는 대략적인 중앙값 주문값, 서비스 지연 시간, 텔레메트리 측정값 등이 있습니다.

Examples

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

이 예시는 8개의 값의 중앙값을 추정합니다.

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
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,
    APPROX_MEDIAN(order_amount) AS ApproxMedianOrderAmount
FROM SalesOrders
GROUP BY region;

C. NULL 값은 무시하세요

이 예시는 중앙값을 추정할 때 값을 무시합니다 NULL .

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
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,
    APPROX_MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceApproxMedianLatency
FROM ServiceLatency;