MEDIANA (Transact-SQL)

Si applica a:Endpoint di analisi SQL in Microsoft Fabric e Warehouse in Microsoft Fabric

La MEDIAN funzione restituisce la mediana esatta, ovvero il 50° percentile, dei valori nonNULL numerici. È possibile usarlo sia come funzione di aggregazione che come funzione finestra (analitica):

  • Utilizzo aggregato: restituisce la mediana per un intero gruppo.
  • Utilizzo delle finestre: restituisce la mediana per ogni partizione mantenendo l'output a livello riga.

Convenzioni relative alla sintassi Transact-SQL

Syntax

Sintassi della funzione di aggregazione:

MEDIAN ( numeric_expression )

Sintassi della funzione analitica:

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

Arguments

numeric_expression

L'espressione numerica la cui mediana è calcolata. I tipi numerici esatti supportati sono int, bigint, smallint, tinyint, decimalnumeric, bit, , smallmoney, e money. I tipi numerici approssimati supportati sono float e real.

Clausola OVER

Il partition_by_clause divide il set di risultati prodotto dalla FROM clausola in partizioni e la funzione viene applicata a ogni partizione.

Se non specifichi partition_by_clause, la funzione tratta tutte le righe dell'insieme di risultati della query come una singola partizione.

La OVER clausola non supporta ORDER BY, ROWS, o RANGE per MEDIAN.

Per altre informazioni, vedere clausola SELECT - OVER (Transact-SQL).

Tipi restituiti

Restituisce float(53).

Osservazioni:

MEDIAN Calcola il 50° percentile continuo dei valori ordinati non inNULL input. Per un numero pari di valori di input, la funzione interpola tra i due valori centrali. Il risultato potrebbe non essere un valore presente nelle righe di input.

MEDIAN è equivalente a PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY numeric_expression) per l'uso aggregato. La forma analitica ha una semantica percentil-continua equivalente all'interno di ogni partizione.

NULL i valori vengono ignorati. Se tutti i valori di input sono NULL, o se nessuna riga è qualificata, MEDIAN restituisce NULL. Quando ANSI_WARNINGS è ON, eliminare NULL i valori produce l'avvertimento aggregato standard.

MEDIAN è non deterministico perché i calcoli in virgola mobile in percorsi di esecuzione paralleli possono produrre lievi variazioni. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.

DISTINCT non è supportata. Le espressioni di personaggi, data, ora e data-time non sono supportate.

La MEDIAN funzione è disponibile in Fabric Data Warehouse e nell'endpoint di analisi SQL di Fabric elementi. La MEDIAN funzione non è supportata in SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure o database SQL in Fabric.

Caso di utilizzo

Da usare MEDIAN quando una media potrebbe essere distorta da valori insolitamente alti o bassi. Ad esempio, il valore mediano dell'ordine, il tempo di risposta o l'importo della richiesta spesso rappresentano un'osservazione tipica più chiaramente della media aritmetica. La forma aggregata riassume i gruppi, mentre la forma analitica aggiunge un benchmark di partizione a ogni riga di dettaglio.

Examples

A. Calcola una mediana aggregata

Questo esempio restituisce la mediana di otto valori. Poiché l'ingresso ha un numero pari di righe, MEDIAN interpola tra 4 e 5.

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

Il risultato è 4.5.

B. Calcola una mediana per ogni gruppo

Questo esempio calcola l'importo mediano degli ordini per ogni regione di vendita.

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. Ignora i valori NULL

Questo esempio ignora l'input NULL e calcola la mediana dai valori rimanenti.

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

Se ogni valore di input è NULL, la funzione restituisce NULL.

D. Calcola una mediana a finestra partizionata

Questo esempio aggiunge la latenza mediana per ogni servizio a ogni riga di richiesta.

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;