QUANTILE (Transact-SQL)

Aplica-se a:Endpoint de análise SQL no Microsoft Fabric e Warehouse no Microsoft Fabric

A QUANTILE função devolve um quantil contínuo exato de valores nãoNULL numéricos. Pode usá-lo tanto como função agregada como função janela (analítica):

  • Utilização agregada: Devolve o quantil solicitado para um grupo inteiro.
  • Utilização da janela: Retorna o quantil solicitado para cada partição, preservando a saída ao nível das linhas.

Transact-SQL convenções de sintaxe

Syntax

Sintaxe da função de agregação:

QUANTILE ( numeric_literal , numeric_expression )

Sintaxe da função analítica:

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

Arguments

numeric_literal

O quantil a calcular. O valor deve estar no intervalo inclusivo de 0.0 até 1.0. Por exemplo, especifique 0.5 calcular a mediana ou 0.95 calcular o percentil 95.

numeric_expression

A expressão numérica cujo quantil é calculado. Os tipos numéricos exatos suportados são int, bigint, smallint, tinyint, numeric, decimal, smallmoney, , e money. Os tipos numéricos aproximados suportados são float e real.

Cláusula OVER

O partition_by_clause divide o conjunto de resultados produzido pela FROM cláusula em partições, e a função é aplicada a cada partição.

Se não especificares partition_by_clause, a função trata todas as linhas do conjunto de resultados da consulta como uma única partição.

A OVER cláusula não suporta ORDER BY, ROWS, nem RANGE para QUANTILE.

Para mais informações, consulte a cláusula SELECT - OVER (Transact-SQL).

Tipos de devolução

Retorna float(53).

Remarks

QUANTILE calcula um quantil contínuo sobre os valores nãoNULL de entrada ordenados. Quando o quantil solicitado fica entre dois valores, a função interpola entre eles. O resultado pode não ser um valor que exista nas linhas de entrada.

A forma agregada de QUANTILE(p, numeric_expression) é equivalente a PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). A forma analítica tem semântica percentil contínua equivalente dentro de cada partição.

NULL os valores são ignorados. Se todos os valores de entrada forem NULL, ou se nenhuma linha qualificar, QUANTILE retorna NULL. Quando ANSI_WARNINGS é ON, eliminar NULL valores produz o aviso agregado padrão.

Para os mesmos valores nãoNULL de entrada e numeric_literal, QUANTILE devolve o mesmo resultado.

DISTINCT não é suportado. Expressões de personagem, data, hora e data-hora não são suportadas.

A QUANTILE função não é suportada no SQL Server, Base de Dados SQL do Azure, Azure SQL Managed Instance ou base de dados SQL no Fabric.

Caso de uso

Use QUANTILE para calcular quartis, percentis e outros limites exatos de distribuição com sintaxe concisa. Por exemplo, calcule os montantes dos pedidos p90 por plano, a latência do serviço p95 por região, ou valores do 1.º trimestre, mediana e terceiro trimestre para uma métrica de negócio.

Examples

A. Calcular quantos agregados

Este exemplo calcula o primeiro quartil, mediana, terceiro quartil e percentil 95.

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. Calcule um quantil para cada grupo

Este exemplo calcula o valor da reclamação no percentil 90 para cada plano de seguro.

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. Devolver NULL para um grupo totalmente NULL

Este exemplo retorna NULL porque todos os valores qualificados são 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. Calcule um quantil de janela particionada

Este exemplo adiciona a latência do 95.º percentil para cada serviço a cada linha de pedidos.

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;