QUANTILE (Transact-SQL)

Platí pro:Koncový bod analýzy SQL v Microsoft Fabric a Warehouse v Microsoft Fabric

Funkce QUANTILE vrací přesný spojitý kvantil nečíselnýchNULL hodnot. Můžete ji použít jako agregační funkci i funkci okna (analýzy):

  • Agregované využití: Vrátí požadovaný kvantil pro celou skupinu.
  • Využití okna: Vrátí požadovaný kvantil pro každou partition při zachování výstupu na úrovni řádku.

Transact-SQL konvence syntaxe

Syntaxe

Syntaxe agregační funkce:

QUANTILE ( numeric_literal , numeric_expression )

Syntaxe analytické funkce:

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

Argumenty

numeric_literal

Kvantil k výpočtu. Hodnota musí být v inkluzivním rozsahu od 0.0 do 1.0. Například specifikujte 0.5 výpočet mediánu nebo 0.95 95. percentilu.

numeric_expression

Číselný výraz, jehož kvantil je vypočítán. Podporované přesné numerické typy jsou int, bigint, smallint, tinyint, numeric, decimal, , smallmoneya .money Podporované přibližné numerické typy jsou float a .real

Klauzule OVER

Partition_by_clause rozdělí sadu výsledků vytvořenou FROM klauzulí na oddíly a funkce se použije na každý oddíl.

Pokud partition_by_clause nespecifikujete, funkce považuje všechny řádky z množiny výsledků dotazu jako jednu partition.

Klauzule OVER nepodporuje ORDER BY, ROWS, ani RANGE pro QUANTILE.

Další informace naleznete v tématu SELECT - OVER klauzule (Transact-SQL).

Návratové typy

Vrátí float(53).

Remarks

QUANTILE vypočítá spojitý kvantil přes uspořádané nevstupníNULL hodnoty. Když požadovaný kvantil spadne mezi dvě hodnoty, funkce mezi nimi interpoluje. Výsledkem nemusí být hodnota, která by existovala ve vstupních řádcích.

Agregovaná forma je QUANTILE(p, numeric_expression) ekvivalentní .PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression) Analytická forma má ekvivalentní percentilově spojitou sémantiku v rámci každé části.

NULL hodnoty jsou ignorovány. Pokud jsou všechny vstupní hodnoty , NULLnebo pokud žádné řádky nesplňují podmínky, QUANTILE vrátí NULL. Když ANSI_WARNINGS je , ONodstranění NULL hodnot vytváří standardní agregované varování.

Pro stejné nevstupníNULL hodnoty a numeric_literal vrátí QUANTILE stejný výsledek.

DISTINCT není podporováno. Znaky, datum, čas a datum a datum nejsou podporovány.

Tato QUANTILE funkce není podporována v SQL Server, Azure SQL Database, Azure SQL Managed Instance ani v SQL databázi ve Fabric.

Případ použití

Použijte k QUANTILE výpočtu kvartilů, percentilů a dalších přesných hranic rozdělení s přesnou syntaxí. Například vypočítejte částky pojistných událostí p90 podle plánu, latenci služby p95 podle regionu, nebo Q1, medián a Q3 hodnoty pro obchodní metriku.

Examples

A. Výpočet agregovaných kvantilů

Tento příklad počítá první kvartil, medián, třetí kvartil a 95. percentil.

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. Vypočítejte kvantil pro každou skupinu

Tento příklad počítá částku nároku na nárok v 90. percentilu pro každý pojistný plán.

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. Vrátit NULL pro skupinu složenou výhradně z NULL

Tento příklad vrací, NULL protože všechny kvalifikační hodnoty jsou 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. Vypočítejte kvantil rozděleného okna

Tento příklad přidává latenci 95. percentilu pro každou službu ke každému řádku požadavku.

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;