Come calcolare la mediana in SQL

April 29

Come calcolare la mediana in SQL


Calcolo della mediana di un insieme è più impegnativo di un semplice calcolo della media o media di un set. Aggiungere nella sintassi e complessità SQL e il compito può sembrare insormontabile a prima. Ma con alcuni concetti semplici e alcuni esempi, il calcolo del valore medio non è sudore. Questo how-to utilizzerà Transact-SQL per i suoi esempi.

istruzione

Trovare la mediana

1 Comprendere la differenza tra la mediana e la media di un insieme. La mediana è il "valore medio" di una serie, mentre la media è la media di tutti gli elementi di un insieme. Ad esempio, in una serie ordinata di numeri {1, 2, 6, 9, 10, 11}, la mediana sarà 7.5 ([6 + 9] / 2), ma la media è 6,5 ([1 + 2 + 6 + 9 + 10 + 11] / 6).

Per calcolare la mediana, contare il numero di elementi nella serie. Se il conteggio è pari, prendere la media dell'elemento nella posizione si trovano contando gli elementi totali e dividendo per due e la posizione trovata dividendo il numero totale di elementi per 2 e aggiungendo uno. Se il conteggio è dispari, prendere l'elemento nella posizione contrassegnata dal numero totale diviso per due e arrotondato al numero intero più vicino.

2 Crea una serie ordinata di numeri con un nuovo indice integrale. Ad esempio, se il dato numerico è memorizzato nella colonna "num" della tabella "dati", creare una nuova tabella temporanea contenente il valore "num" con un nuovo indice:

CREATE TABLE #values ​​(
ID int NOT NULL IDENTITY (1,1),
num numerico (9,4)
)

INSERT INTO #values ​​(num)
SELEZIONA num
Dai dati
ORDER BY num

ORDER BY dichiarazione è molto importante per il calcolo della mediana.

3 Selezionare i dati dalla tabella temporanea dove ID è uguale alla metà del conteggio di record della tabella. Se c'è un numero dispari di record, prendere la media dei due valori come mediana finale. Questo può essere realizzato nella singola query di seguito:

SELEZIONE MEDIA (num)
DA #values ​​v
ADERIRE (
SELECT COUNT (*) AS cnt
DA #values ​​_v
) C ON (
c.ID = SOFFITTO (_v.cnt / 2.0)
E (

_v.cnt % 2 = 1 -- cnt is odd
OR (
_v.cnt % 2 = 0 -- cnt is even
AND c.ID = (_v.cnt / 2.0) + 1
)

)
)

Questa query utilizza una sottoquery per trovare il conteggio di record in modo che il valore medio può essere determinato. In entrambi i casi di un ancora contare e un conteggio dispari, l'uso di soffitto per arrotondare (_v.cnt / 2.0) è preciso. (Ad esempio, anche: 6/2 = 3; Odd: 7/2 = 3.5, che viene arrotondato a 4) Inoltre, quando il conteggio è ancora, aggiungere 1 a (_v.cnt / 2.0) per ottenere il secondo elemento di includere nella mediana finale.

Consigli e avvertenze

  • Se si utilizza una versione recente di Microsoft SQL Server, ad esempio 2005 o 2008, è possibile utilizzare "espressioni di tabella comuni" invece di creare una tabella temporanea. A seconda della configurazione dello schema e server, questo può fornire un aumento delle prestazioni.