QUANTILE (Transact-SQL)

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

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

  • Zużycie agregatu: Zwraca żądaną kwantylę dla całej grupy.
  • Wykorzystanie okna: Zwraca żądaną kwantylę dla każdej partycji, zachowując wyjście na poziomie wiersza.

Transact-SQL konwencje składni

Syntax

Składnia funkcji agregacji:

QUANTILE ( numeric_literal , numeric_expression )

Składnia funkcji analitycznej:

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

Arguments

numeric_literal

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

numeric_expression

Wyrażenie liczbowe, którego kwantyl jest obliczany. 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 QUANTILE.

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

Typy zwracane

Zwraca wartość float(53).

Remarks

QUANTILE oblicza kwantyl ciągły po uporządkowanych wartościach niewejściowychNULL . Gdy żądana kwantyla znajduje się pomiędzy dwiema wartościami, funkcja interpoluje między nimi. Wynik może nie być wartością istniejącą w wierszach wejściowych.

Forma agregowana jest QUANTILE(p, numeric_expression) równoważna .PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression) Forma analityczna posiada równoważną semantykę percentylowo-ciągłą w każdej partycji.

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

Dla tych samych wartości niebędącychNULL wejściem i numeric_literalQUANTILE daje ten sam wynik.

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

Funkcja ta 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

Użyj do QUANTILE obliczania kwartyli, percentyli i innych dokładnych granic rozkładu z zwięzłą składnią. Na przykład oblicz kwoty roszczeń p90 według planu, p95 opóźnienia usług według regionów lub wartości Q1, mediany i Q3 dla metryki biznesowej.

Examples

Odp. Obliczanie kwentyli agregatu

Ten przykład oblicza pierwszy kwartyl, medianę, trzeci kwartyl oraz 95. percentyl.

WITH Samples AS (
    SELECT *
    FROM (VALUES
        (1), (NULL), (2), (3), (4), (5), (6), (7), (8), (13)
    ) AS v(value)
)
SELECT
    QUANTILE(0.25, value) AS Q1_25thPercentile,
    QUANTILE(0.50, value) AS Median_50thPercentile,
    QUANTILE(0.75, value) AS Q3_75thPercentile,
    QUANTILE(0.95, value) AS P95
FROM Samples;

B. Oblicz kwantyl dla każdej grupy

Ten przykład oblicza 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,
    QUANTILE(0.90, claim_amount) AS P90ClaimAmount
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 QUANTILE(0.90, discount_percent) AS P90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. Oblicz kwantylę okna podzielonego

Ten przykład dodaje 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,
    QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceP95Latency
FROM ServiceLatency;