QUANTILE (Transact-SQL)

Si applica a:Endpoint di analisi SQL in Microsoft Fabric e Warehouse in Microsoft Fabric

La QUANTILE funzione restituisce un quantile esatto continuo di valori nonNULL numerici. È possibile usarlo sia come funzione di aggregazione che come funzione finestra (analitica):

  • Utilizzo aggregato: restituisce il quantile richiesto per un intero gruppo.
  • Utilizzo delle finestre: restituisce il quantile richiesto per ogni partizione preservando l'output a livello di riga.

Convenzioni relative alla sintassi Transact-SQL

Syntax

Sintassi della funzione di aggregazione:

QUANTILE ( numeric_literal , numeric_expression )

Sintassi della funzione analitica:

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

Arguments

numeric_literal

Il quantile da calcolare. Il valore deve appartenere all'intervallo inclusivo da 0.0 fino a 1.0. Ad esempio, specifica 0.5 di calcolare la mediana o 0.95 di calcolare il 95° percentile.

numeric_expression

L'espressione numerica il cui quantile è calcolato. I tipi numerici esatti supportati sono int, bigint, smallint, tinyint, decimalnumeric, , smallmoney, e money. I tipi numerici approssimati supportati sono float e real.

Clausola OVER

Il partition_by_clause divide il set di risultati prodotto dalla FROM clausola in partizioni e la funzione viene applicata a ogni partizione.

Se non specifichi partition_by_clause, la funzione tratta tutte le righe dell'insieme di risultati della query come una singola partizione.

La OVER clausola non supporta ORDER BY, ROWS, o RANGE per QUANTILE.

Per altre informazioni, vedere clausola SELECT - OVER (Transact-SQL).

Tipi restituiti

Restituisce float(53).

Osservazioni:

QUANTILE calcola un quantile continuo sui valori ordinati nonNULL in ingresso. Quando il quantile richiesto si trova tra due valori, la funzione interpola tra di essi. Il risultato potrebbe non essere un valore presente nelle righe di input.

La forma aggregata di QUANTILE(p, numeric_expression) è equivalente a PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). La forma analitica ha una semantica percentil-continua equivalente all'interno di ogni partizione.

NULL i valori vengono ignorati. Se tutti i valori di input sono NULL, o se nessuna riga è qualificata, QUANTILE restituisce NULL. Quando ANSI_WARNINGS è ON, eliminare NULL i valori produce l'avvertimento aggregato standard.

Per gli stessi valori nonNULL in input e numeric_literal, QUANTILE restituisce lo stesso risultato.

DISTINCT non è supportata. Le espressioni di personaggi, data, ora e data-time non sono supportate.

La QUANTILE funzione non è supportata in SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure o database SQL in Fabric.

Caso di utilizzo

Usare QUANTILE per calcolare quartili, percentili e altri limiti di distribuzione esatti con sintassi concisa. Ad esempio, calcolare gli importi delle richieste p90 per piano, la latenza del servizio p95 per regione, oppure i valori del primo trimestre, mediano e terzo trimestre per una metrica aziendale.

Examples

A. Calcolare i quantili aggregati

Questo esempio calcola il primo quartile, la mediana, il terzo quartile e il 95° percentile.

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. Calcola un quantile per ciascun gruppo

Questo esempio calcola l'importo del 90° percentile del sinistro per ciascun piano assicurativo.

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. Restituisci NULL per un gruppo all-NULL

Questo esempio restituisce NULL perché tutti i valori qualificanti sono 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. Calcola un quantile di finestra partizionata

Questo esempio aggiunge la latenza del 95° percentile per ogni servizio a ogni riga di richieste.

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;