QUANTILE (Transact-SQL)

S’applique à :Point de terminaison d’analytique SQL dans Microsoft Fabric et Warehouse dans Microsoft Fabric

La QUANTILE fonction retourne un quantile exact continu de valeurs nonNULL numériques. Vous pouvez l’utiliser comme fonction d’agrégation et de fenêtre (analytique) :

  • Utilisation agrégée : Retourne le quantile demandé pour un groupe entier.
  • Utilisation de la fenêtre : Retourne le quantile demandé pour chaque partition tout en conservant la sortie au niveau des lignes.

Conventions de la syntaxe Transact-SQL

Syntax

Syntaxe de la fonction d’agrégation :

QUANTILE ( numeric_literal , numeric_expression )

Syntaxe de la fonction analytique :

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

Arguments

numeric_literal

Le quantile à calculer. La valeur doit être dans l’intervalle inclusif de 0.0 jusqu’à 1.0. Par exemple, spécifier 0.5 pour calculer la médiane ou 0.95 pour calculer le 95e percentile.

numeric_expression

L’expression numérique dont le quantile est calculé. Les types numériques exacts pris en charge sont int, bigint, smallint, tinyintnumeric, decimal, , smallmoney, et money. Les types numériques approximatifs pris en charge sont float et real.

CLAUSE OVER

Le partition_by_clause divise le jeu de résultats généré par la FROM clause en partitions et la fonction est appliquée à chaque partition.

Si vous ne spécifiez pas partition_by_clause, la fonction traite toutes les lignes de l’ensemble de résultats de requêtes comme une seule partition.

La OVER clause ne supporte ORDER BYpas , ROWS, ni RANGE pour QUANTILE.

Pour plus d’informations, consultez la clause SELECT - OVER (Transact-SQL).

Types de retour

Retourne float(53).

Remarks

QUANTILE calcule un quantile continu sur les valeurs ordonnées non entréesNULL . Lorsque le quantile demandé se situe entre deux valeurs, la fonction interpole entre elles. Le résultat peut ne pas être une valeur qui existe dans les lignes d’entrée.

La forme agrégée de QUANTILE(p, numeric_expression) est équivalente à PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). La forme analytique possède une sémantique continue par percentile équivalente dans chaque partition.

NULL les valeurs sont ignorées. Si toutes les valeurs d’entrée sont NULL, ou si aucune ligne ne correspond, il QUANTILE retourne NULL. Lorsque ANSI_WARNINGS est ON, éliminer NULL des valeurs produit l’avertissement agrégé standard.

Pour les mêmes valeurs nonNULL entrées et numeric_literal, QUANTILE restitue le même résultat.

DISTINCT n’est pas pris en charge. Les expressions de caractère, date, heure et date time ne sont pas prises en charge.

La QUANTILE fonction n'est pas prise en charge dans SQL Server, Azure SQL Database, Azure SQL Managed Instance, ni SQL Database dans Fabric.

Cas d’utilisation

Utilisez QUANTILE pour calculer les quartiles, percentiles et autres limites exactes de distribution avec une syntaxe concise. Par exemple, calculez les montants de demandes p90 par forfait, la latence de service p95 par région, ou les valeurs du premier trimestre, de la médiane et du troisième trimestre pour un indicateur métier.

Examples

R : Calculer les quantes d’agrégats

Cet exemple calcule le premier quartile, la médiane, le troisième quartile et le 95e 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. Calculez un quantile pour chaque groupe

Cet exemple calcule le montant du 90e percentile de la réclamation pour chaque contrat d’assurance.

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. Retourner NULL pour un groupe tout-NULL

Cet exemple revient NULL car toutes les valeurs qualifiantes sont 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. Calculer un quantile de fenêtre partitionnée

Cet exemple ajoute la latence du 95e percentile pour chaque service à chaque ligne de requête.

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;