MEDIANA (Transact-SQL)

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

A MEDIAN função devolve a mediana exata, ou percentil 50, dos valores nãoNULL numéricos. Pode usá-lo tanto como função agregada como função janela (analítica):

  • Uso agregado: Devolve a mediana de um grupo inteiro.
  • Utilização da janela: Devolve a mediana para cada partição, mantendo a saída ao nível da linha.

Transact-SQL convenções de sintaxe

Syntax

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

MEDIAN ( numeric_expression )

Sintaxe da função analítica:

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

Arguments

numeric_expression

A expressão numérica cuja mediana é calculada. Os tipos numéricos exatos suportados são int, bigint, smallint, tinyint, numericdecimal, bit, , 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 MEDIAN.

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

Tipos de devolução

Retorna float(53).

Remarks

MEDIAN calcula o percentil contínuo 50 dos valores ordenados não deNULL entrada. Para um número par de valores de entrada, a função interpola entre os dois valores do meio. O resultado pode não ser um valor que exista nas linhas de entrada.

MEDIAN é equivalente a PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY numeric_expression) para uso agregado. 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, MEDIAN retorna NULL. Quando ANSI_WARNINGS é ON, eliminar NULL valores produz o aviso agregado padrão.

MEDIAN é não determinístico porque cálculos em ponto flutuante em caminhos de execução paralelos podem produzir pequenas variações. Para obter mais informações, consulte Funções determinísticas e não determinísticas.

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

A MEDIAN função está disponível no Fabric Data Warehouse e no endpoint de análise SQL de Fabric itens. A MEDIAN 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

Usar MEDIAN quando uma média pode ser distorcida por valores incomumente altos ou baixos. Por exemplo, o valor mediano da ordem, o tempo de resposta ou o valor da reclamação frequentemente representam uma observação típica de forma mais clara do que a média aritmética. A forma agregada resume os grupos, e a forma analítica adiciona um benchmark de partição a cada linha de detalhe.

Examples

A. Calcule uma mediana agregada

Este exemplo devolve a mediana de oito valores. Como a entrada tem um número par de linhas, MEDIAN interpola entre 4 e 5.

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

O resultado é 4.5.

B. Calcule uma mediana para cada grupo

Este exemplo calcula o montante mediano das encomendas 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,
    MEDIAN(order_amount) AS MedianOrderAmount
FROM SalesOrders
GROUP BY region;

C. Ignorar os valores NULL

Este exemplo ignora a NULL entrada e calcula a mediana a partir dos valores restantes.

SELECT MEDIAN(value) AS MedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);

Se cada valor de entrada for NULL, a função devolve NULL.

D. Calcule uma mediana de janela particionada

Este exemplo adiciona a latência mediana de 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,
    MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceMedianLatency
FROM ServiceLatency;