APPROX_QUANTILE (Transact-SQL)

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

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

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

Transact-SQL konvence syntaxe

Syntaxe

Syntaxe agregační funkce:

APPROX_QUANTILE ( numeric_literal , numeric_expression )

Syntaxe analytické funkce:

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

Argumenty

numeric_literal

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

numeric_expression

Číselný výraz, jehož přibližný 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 APPROX_QUANTILE.

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

Návratové typy

Vrátí float(53).

Remarks

APPROX_QUANTILE odhaduje spojitý kvantil přes uspořádané nevstupníNULL hodnoty. Používejte QUANTILE, když potřebujete přesný výsledek.

Přibližné výsledky se mohou mírně lišit od přesných QUANTILE výsledků a mohou se lišit mezi prováděními kvůli plánům a paralelním cestám sloučení. APPROX_QUANTILE je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.

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

APPROX_QUANTILE je určen ke snížení latence a využití paměti ve srovnání s přesnými QUANTILE výpočty na velkých datových sadách.

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

Funkce APPROX_QUANTILE je dostupná v Fabric Data Warehouse a jako SQL analytics endpoint Fabric položek. Tato APPROX_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žití APPROX_QUANTILE pro rozsáhlé dashboardy, průzkumnou analýzu a skupinové reportování, kde stačí přesné odhady. Například odhadnout částky pojistných událostí p90, latenci služby p95 nebo telemetrické hodnoty p99 bez nákladů na přesný kvantilový výpočet.

Examples

A. Výpočet agregovaných přibližných kvantilů

Tento příklad odhaduje 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
    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. Vypočítat přibližný kvantil pro každou skupinu

Tento příklad odhaduje výši 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,
    APPROX_QUANTILE(0.90, claim_amount) AS ApproxP90ClaimAmount
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 APPROX_QUANTILE(0.90, discount_percent) AS ApproxP90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. Vypočítejte rozdělené okno přibližně kvantilu

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

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;