APPROX_QUANTILE (Transact-SQL)

Gäller för:SQL-analysslutpunkt i Microsoft Fabric och Warehouse i Microsoft Fabric

Funktionen returnerar APPROX_QUANTILE en ungefärlig kontinuerlig kvtil av icke-numeriskaNULL värden. Du kan använda den som både en aggregeringsfunktion och en funktion för fönster (analys):

  • Aggregerad användning: Returnerar den begärda ungefärliga kvtilen för en hel grupp.
  • Fönsteranvändning: Returnerar den begärda ungefärliga kvanten för varje partition samtidigt som radnivåutdata bevaras.

Transact-SQL syntaxkonventioner

Syntax

Syntax för sammansättningsfunktionen:

APPROX_QUANTILE ( numeric_literal , numeric_expression )

Analysfunktionssyntax:

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

Arguments

numeric_literal

Kvantilen att uppskatta. Värdet måste ligga i det inkluderande intervallet från 0.0 till .1.0 Till exempel, ange 0.5 att uppskatta medianen eller 0.95 95:e percentilen.

numeric_expression

Det numeriska uttrycket vars ungefärliga kvtil beräknas. Stödda exakta numeriska typer är int, , , smallint, tinyint, decimalnumeric, smallmoney, , och moneybigint. Stödda approximativa numeriska typer är float och real.

OVER-sats

Partition_by_clause delar upp resultatuppsättningen FROM som genereras av -satsen i partitioner och funktionen tillämpas på varje partition.

Om du inte specificerar partition_by_clause behandlar funktionen alla rader i frågeresultatuppsättningen som en enda partition.

Klausulen OVER stöder ORDER BYinte , ROWS, eller RANGE för APPROX_QUANTILE.

Mer information finns i SELECT - OVER-satsen (Transact-SQL).

Returtyper

Returnerar float(53).

Remarks

APPROX_QUANTILE uppskattar en kontinuerlig kvant över de ordnade icke-indatavärdenaNULL . Använd QUANTILE när du behöver ett exakt resultat.

Ungefärliga resultat kan skilja sig något från exakta QUANTILE resultat och kan variera mellan utföranden på grund av exekveringsplaner och parallella sammanslagningsvägar. APPROX_QUANTILE är nondeterministisk. Mer information finns i deterministiska och icke-terministiska funktioner.

NULL värden ignoreras. Om alla indatavärden är NULL, eller om inga rader kvalificerar, APPROX_QUANTILE returnerar NULL. När ANSI_WARNINGS är ON, ger eliminering NULL av värden den standardiserade aggregerade varningen.

APPROX_QUANTILE är avsedd att minska latens och minnesanvändning jämfört med exakta QUANTILE beräkningar på stora datamängder.

DISTINCT stöds inte. Tecken-, datum-, tid- och datumtidsuttryck stöds inte.

Funktionen APPROX_QUANTILE finns tillgänglig i Fabric Data Warehouse och i SQL-analysändpunkten för Fabric objekt. Funktionen APPROX_QUANTILE stöds inte i SQL Server, Azure SQL Database, Azure SQL Managed Instance eller SQL Database in Fabric.

Användningsfall

Använd APPROX_QUANTILE för storskaliga instrumentpaneler, utforskande analyser och grupperad rapportering där en noggrann uppskattning är tillräcklig. Till exempel, uppskatta p90-kravbelopp, p95-servicelatens eller p99-telemetrivärden utan kostnaden för en exakt kvantilberäkning.

Examples

A. Beräkna aggregerade approximativa kvantiler

Detta exempel uppskattar första kvartilen, medianen, tredje kvartilen och 95:e percentilen.

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. Beräkna en ungefärlig kvtil för varje grupp

Detta exempel uppskattar det 90:e percentilbeloppet för skadeersättning för varje försäkringsplan.

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. Returnera NULL för en hel-NULL-grupp

Detta exempel returnerar NULL eftersom alla kvalificerande värden är 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. Beräkna en approximativ kvtil av ett partitionerat fönster

Detta exempel lägger till den ungefärliga 95:e percentilens latens för varje tjänst till varje förfrågningsrad.

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;