APPROX_QUANTILE (Transact-SQL)

Dotyczy:Punkt końcowy analizy SQL w usłudze Microsoft Fabric i magazynie w usłudze Microsoft Fabric

Funkcja APPROX_QUANTILE zwraca przybliżoną ciągłą kwantylę wartości nienumerycznychNULL . Można go użyć zarówno jako funkcji agregującej, jak i funkcji okna (analitycznego):

  • Zużycie agregatyczne: Zwraca żądaną przybliżoną kwantylę dla całej grupy.
  • Wykorzystanie okna: Zwraca żądaną przybliżoną kwantylę dla każdej partycji, zachowując wynik na poziomie wiersza.

Transact-SQL konwencje składni

Syntax

Składnia funkcji agregacji:

APPROX_QUANTILE ( numeric_literal , numeric_expression )

Składnia funkcji analitycznej:

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

Arguments

numeric_literal

Kwantyl do oszacowania. Wartość musi mieścić się w zakresie inkluzywnym od 0.0 do .1.0 Na przykład określ 0.5 oszacowanie mediany lub 0.95 95. percentyla.

numeric_expression

Wyrażenie liczbowe, którego przybliżona kwantyl jest obliczana. Obsługiwane dokładne typy numeryczne to int, bigint, smallint, tinyintnumeric, , decimal, , smallmoneyoraz .money Obsługiwane przybliżone typy numeryczne to float oraz .real

Klauzula OVER

Partition_by_clause dzieli zestaw wyników wygenerowany przez klauzulę FROM na partycje, a funkcja jest stosowana do każdej partycji.

Jeśli nie określisz partition_by_clause, funkcja traktuje wszystkie wiersze zbioru wyników zapytania jako jedną partycję.

Klauzula OVER nie wspiera ORDER BY, ROWS, ani RANGE dla APPROX_QUANTILE.

Aby uzyskać więcej informacji, zobacz SELECT - OVER clause (Transact-SQL).

Typy zwracane

Zwraca wartość float(53).

Remarks

APPROX_QUANTILE szacuje kwantyl ciągły względem uporządkowanych wartości niewejściowychNULL . Używaj QUANTILE , gdy potrzebujesz dokładnego rezultatu.

Przybliżone wyniki mogą nieznacznie różnić się od wyników dokładnych QUANTILE i mogą się różnić w zależności od wykonania ze względu na plany wykonania i równoległe ścieżki scalania. APPROX_QUANTILE jest niedeterministyczny. Aby uzyskać więcej informacji, zobacz funkcje deterministyczne i niedeterministyczne.

NULL wartości są ignorowane. Jeśli wszystkie wartości wejściowe są , NULLlub jeśli żaden wiersz nie spełnia kwalifikacji, APPROX_QUANTILE zwraca NULL. Gdy ANSI_WARNINGS jest , ONeliminacja NULL wartości generuje standardowe ostrzeżenie agregatywne.

APPROX_QUANTILE ma na celu zmniejszenie opóźnień i zużycia pamięci w porównaniu z dokładnymi QUANTILE obliczeniami na dużych zbiorach danych.

DISTINCT nie jest obsługiwany. Nie są obsługiwane wyrażenia dotyczące postaci, daty, godziny i daty i godziny.

Funkcja ta APPROX_QUANTILE jest dostępna w Fabric Data Warehouse oraz w endpointze analityki SQL dla Fabric elementów. Funkcja ta APPROX_QUANTILE nie jest obsługiwana w SQL Server, Azure SQL Database, Azure SQL Managed Instance ani w bazie danych SQL w Fabric.

Przypadek użycia

Zastosowanie APPROX_QUANTILE do dużych pulpitów nawigacyjnych, analiz eksploracyjnych oraz raportowania grupowego, gdzie wystarczy dokładne oszacowanie. Na przykład oszacuj kwoty roszczeń p90, opóźnienia usługi p95 lub wartości telemetryczne p99 bez kosztu dokładnego obliczenia kwantylu.

Examples

Odp. Oblicz przybliżone kwantyle agregatyczne

Ten przykład szacuje pierwszy kwartyl, medianę, trzeci kwartyl i 95. percentyl.

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. Oblicz przybliżony kwantyl dla każdej grupy

Ten przykład szacuje kwotę roszczenia w 90. percentylu dla każdego planu ubezpieczeniowego.

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. Return NULL dla grupy składającej się wyłącznie z NULL

Ten przykład zwraca, NULL ponieważ wszystkie wartości kwalifikujące to 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. Oblicz przybliżone kwantyl podzielonego okna

Ten przykład dodaje przybliżone opóźnienie 95. percentylu dla każdej usługi do każdego wiersza żądania.

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;