KVANT (Transact-SQL)

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

Funktionen returnerar QUANTILE en exakt kontinuerlig kvant 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 kvantilen för en hel grupp.
  • Fönsteranvändning: Returnerar den begärda kvanten för varje partition samtidigt som radnivåutdata bevaras.

Transact-SQL syntaxkonventioner

Syntax

Syntax för sammansättningsfunktionen:

QUANTILE ( numeric_literal , numeric_expression )

Analysfunktionssyntax:

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

Arguments

numeric_literal

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

numeric_expression

Det numeriska uttrycket vars 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 QUANTILE.

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

Returtyper

Returnerar float(53).

Remarks

QUANTILE beräknar en kontinuerlig kvant över de ordnade icke-indatavärdenaNULL . När den begärda kvanten hamnar mellan två värden interpolerar funktionen mellan dem. Resultatet kanske inte är ett värde som finns i indataraderna.

Den aggregerade formen av QUANTILE(p, numeric_expression) är ekvivalent med PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). Den analytiska formen har ekvivalent percentilkontinuerlig semantik inom varje partition.

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

För samma icke-indatavärdenNULL och numeric_literal returnerar QUANTILE samma resultat.

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

Funktionen QUANTILE stöds inte i SQL Server, Azure SQL Database, Azure SQL Managed Instance eller SQL Database in Fabric.

Användningsfall

Använd QUANTILE för att beräkna kvartiler, percentiler och andra exakta fördelningsgränser med koncis syntax. Till exempel, beräkna p90-ansökningsbelopp per plan, p95-tjänstelatens per region, eller Q1-, median- och Q3-värden för ett affärsmått.

Examples

A. Beräkna aggregerade kvantiler

Detta exempel beräknar 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
    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. Beräkna en kvtil för varje grupp

Detta exempel beräknar det 90:e percentilbeloppet 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,
    QUANTILE(0.90, claim_amount) AS P90ClaimAmount
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 QUANTILE(0.90, discount_percent) AS P90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. Beräkna en partitionerad fönsterkvtil

Detta exempel lägger till den 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,
    QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceP95Latency
FROM ServiceLatency;