APPROX_QUANTILE (Transact-SQL)

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

이 함수는 APPROX_QUANTILE 비NULL 수치 값들의 대략적인 연속 분위수를 반환합니다. 집계 함수와 창(분석) 함수로 사용할 수 있습니다.

  • 집계 사용: 전체 그룹에 대해 요청한 근사적인 분위수를 반환합니다.
  • 윈도우 사용: 각 파티션에 대해 요청된 근사 분위수를 반환하면서 행 단위 출력은 보존합니다.

Transact-SQL 구문 표기 규칙

Syntax

집계 함수 구문:

APPROX_QUANTILE ( numeric_literal , numeric_expression )

분석 함수 구문:

APPROX_QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )

Arguments

numeric_literal

분위수를 추정하는 것. 값은 부터 까지 포함하는 범위 0.01.0내에 있어야 합니다. 예를 들어, 중앙값을 0.95 추정하거나 95번째 백분위수를 추정하는 것을 지정 0.5 하세요.

numeric_expression

근사적인 분위수를 계산하는 수치식입니다. 지원되는 정확한 숫자 유형은 int, numericbiginttinyintdecimalsmallintsmallmoney그리고 money있습니다. 지원되는 근사 수치 유형은 float 와 real입니다.

OVER 절

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

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

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

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

반환 형식

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

비고

APPROX_QUANTILE 순서가 있는 비NULL 입력 값들에 대한 연속 분위수를 추정합니다. 정확한 결과가 필요할 때는 QUANTILE 을 사용하세요.

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

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

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

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

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

사용 사례

대규모 대시보드, 탐색적 분석, 그리고 정확한 추정치만으로도 충분한 그룹화 보고에 사용됩니다 APPROX_QUANTILE . 예를 들어, p90 청구 금액, p95 서비스 지연 시간, p99 텔레메트리 값을 정확한 분위수 계산 비용 없이 추정할 수 있습니다.

Examples

A. 총합 근사 분위수 계산

이 예시는 1/4분위수, 중앙값, 3분위수, 95번째 백분위수를 추정합니다.

WITH Samples AS (
    SELECT *
    FROM (VALUES
        (1), (NULL), (2), (3), (4), (5), (6), (7), (8), (13)
    ) AS v(value)
)
SELECT
    APPROX_QUANTILE(0.25, value) AS ApproxQ1,
    APPROX_QUANTILE(0.50, value) AS ApproxMedian,
    APPROX_QUANTILE(0.75, value) AS ApproxQ3,
    APPROX_QUANTILE(0.95, value) AS ApproxP95
FROM Samples;

B. 각 군에 대해 근사적인 분위수를 계산한다

이 예시는 각 보험 플랜의 90번째 백분위수 청구 금액을 추정한 것입니다.

WITH Claims AS (
    SELECT *
    FROM (VALUES
        ('Plan-A', 420.00),
        ('Plan-A', 500.00),
        ('Plan-A', 610.00),
        ('Plan-B', 250.00),
        ('Plan-B', 275.00),
        ('Plan-B', 310.00)
    ) AS v(plan_name, claim_amount)
)
SELECT
    plan_name,
    APPROX_QUANTILE(0.90, claim_amount) AS ApproxP90ClaimAmount
FROM Claims
GROUP BY plan_name;

C. 모두 NULL 그룹에 대해 NULL을 반환합니다.

이 예시는 모든 자격 값이 이기 NULL때문에 반환됩니다NULL.

WITH CampaignDiscounts AS (
    SELECT *
    FROM (VALUES
        (9001, NULL),
        (9001, NULL),
        (9001, NULL),
        (9002, 10.00)
    ) AS v(campaign_id, discount_percent)
)
SELECT APPROX_QUANTILE(0.90, discount_percent) AS ApproxP90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. 분할된 창의 근사 분위수를 계산합니다

이 예시는 각 서비스의 약 95백분위수 지연 시간을 각 요청 행에 더합니다.

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_QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceApproxP95Latency
FROM ServiceLatency;