MEDIANA (Transact-SQL)

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

A MEDIAN função retorna a mediana exata, ou percentil 50, dos 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 a mediana de um grupo inteiro.
  • Uso da janela: Retorna a mediana de cada partição enquanto preserva a saída em nível de linha.

Convenções de sintaxe do Transact-SQL

Syntax

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

MEDIAN ( numeric_expression )

Sintaxe de função analítica:

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

Argumentos

numeric_expression

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

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

Tipos de retorno

Retorna float(53).

Observações

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 possui semântica equivalente percentil-contínua dentro de cada partição.

NULL os valores são ignorados. Se todos os valores de entrada forem NULL, ou se nenhuma linha se qualificar, retorna MEDIANNULL. 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, confira Funções determinísticas e não determinísticas.

Não há suporte para DISTINCT. Expressões de personagem, data, hora e data de data 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, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou SQL Database no Fabric.

Caso de uso

Uso MEDIAN quando uma média pode ser distorcida por valores incomumente altos ou baixos. Por exemplo, valor mediano da ordem, tempo de resposta ou valor da reivindicaçã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 retorna 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 valor mediano do pedido 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. Ignore 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 todo valor de entrada for NULL, a função retorna NULL.

D. Calcule um separador central de janela particionado

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