APPROX_QUANTILE (Transact-SQL)

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

La APPROX_QUANTILE fonction retourne un quantile continu approximatif 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 approximatif demandé pour un groupe entier.
  • Utilisation des fenêtres : Retourne le quantile approximatif demandé pour chaque partition tout en préservant la sortie au niveau des lignes.

Conventions de la syntaxe Transact-SQL

Syntax

Syntaxe de la fonction d’agrégation :

APPROX_QUANTILE ( numeric_literal , numeric_expression )

Syntaxe de la fonction analytique :

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

Arguments

numeric_literal

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

numeric_expression

L’expression numérique dont le quantile approximatif 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 APPROX_QUANTILE.

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

Types de retour

Retourne float(53).

Remarks

APPROX_QUANTILE Estime un quantile continu sur les valeurs ordonnées non entréesNULL . Utilisez QUANTILE lorsque vous avez besoin d’un résultat exact.

Les résultats approximatifs peuvent différer légèrement des résultats exacts QUANTILE et varier d’une exécution à l’autre en raison des plans d’exécution et des chemins de fusion parallèles. APPROX_QUANTILE n’est pas déterministe. Pour plus d’informations, consultez Fonctions déterministes et non déterministes.

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

APPROX_QUANTILE vise à réduire la latence et l’utilisation de la mémoire par rapport aux calculs exacts QUANTILE sur de grands ensembles de données.

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

La APPROX_QUANTILE fonction est disponible dans Fabric Data Warehouse et le point d’arrivée SQL Analytics de Fabric items. La APPROX_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

À utiliser APPROX_QUANTILE pour des tableaux de bord à grande échelle, des analyses exploratoires et des rapports groupés où une estimation proche est suffisante. Par exemple, estimez les montants de p90 demandes, la latence de service p95 ou les valeurs de télémétrie p99 sans le coût d’un calcul exact de quantile.

Examples

R : Calculer les quantes approximatifs agrégés

Cet exemple estime 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
    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. Calculer un quantile approximatif pour chaque groupe

Cet exemple estime le montant des réclamations au 90e percentile 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,
    APPROX_QUANTILE(0.90, claim_amount) AS ApproxP90ClaimAmount
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 APPROX_QUANTILE(0.90, discount_percent) AS ApproxP90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. Calculer un quantile approximatif de fenêtre partitionnée

Cet exemple ajoute la latence approximative 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,
    APPROX_QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceApproxP95Latency
FROM ServiceLatency;