APPROX_MEDIAN (Transact-SQL)

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

A APPROX_MEDIAN função retorna uma mediana aproximada, ou percentil 50, de valores nãoNULL numéricos. Você pode usá-la como uma função de agregação e uma função de janela (analítica):

  • Uso agregado: Retorna uma mediana aproximada para todo o grupo.
  • Uso da janela: Retorna uma mediana aproximada para cada partição, preservando a saída em nível de linha.

Convenções de sintaxe do Transact-SQL

Syntax

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

APPROX_MEDIAN ( numeric_expression )

Sintaxe de função analítica:

APPROX_MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )

Argumentos

numeric_expression

A expressão numérica cuja mediana aproximada é calculada. Tipos numéricos exatos suportados são int, bigint, smallint, tinyint, numeric, decimal, smallmoney, e money. 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 você não especificar 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 APPROX_MEDIAN.

Para obter mais informações, consulte SELECT – Cláusula OVER (Transact-SQL).

Tipos de retorno

Retorna float(53).

Observações

APPROX_MEDIAN estima o percentil contínuo 50 dos valores ordenados não deNULL entrada. Use MEDIANA quando precisar de um resultado exato.

Resultados aproximados podem diferir ligeiramente dos resultados exatos MEDIAN e podem variar entre execuções devido a planos de execução e caminhos paralelos de fusão. APPROX_MEDIAN é não determinístico. Para obter mais informações, confira Funções determinísticas e não determinísticas.

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

APPROX_MEDIAN tem como objetivo reduzir a latência e o uso de memória em comparação com cálculos exatos MEDIAN em grandes conjuntos de dados.

Não há suporte para DISTINCT. Expressões de personagem, data, hora e data de data não são suportadas.

A APPROX_MEDIAN função está disponível no Fabric Data Warehouse e no endpoint de análise SQL de Fabric itens. A APPROX_MEDIAN função não é suportada no SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou SQL Database no Fabric.

Caso de uso

Use APPROX_MEDIAN para dashboards em grande escala, análises exploratórias e relatórios agrupados onde uma estimativa próxima é suficiente e o desempenho da consulta importa mais do que uma mediana exata. Exemplos comuns incluem valor aproximado da ordem mediana, latência de serviço e medições de telemetria.

Examples

A. Calcule uma mediana aproximada agregada

Este exemplo estima a mediana de oito valores.

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);

O resultado é próximo da mediana exata de 4.5, mas pode variar ligeiramente.

B. Calcule uma mediana aproximada para cada grupo

Este exemplo estima o valor mediano dos pedidos para cada região de vendas.

WITH SalesOrders AS (
    SELECT *
    FROM (VALUES
        ('North', 120.00),
        ('North', 220.00),
        ('North', 320.00),
        ('South', 150.00),
        ('South', 250.00),
        ('South', 450.00)
    ) AS v(region, order_amount)
)
SELECT
    region,
    APPROX_MEDIAN(order_amount) AS ApproxMedianOrderAmount
FROM SalesOrders
GROUP BY region;

C. Ignore valores NULL

Este exemplo ignora NULL valores ao estimar a mediana.

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);

Se todo valor de entrada for NULL, a função retorna NULL.

D. Calcule uma mediana aproximada de janela particionada

Este exemplo adiciona a latência mediana aproximada de cada serviço a cada linha de requisição.

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_MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceApproxMedianLatency
FROM ServiceLatency;