April 29
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.
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.