2010-10-31 10 views
6

Sto tentando di implementare una procedura per valutare lo median absolute deviation di un set di numeri (in genere ottenuto tramite una clausola GROUP BY).Valutazione della deviazione assoluta media di un insieme di numeri in Oracle

Un esempio di una query in cui mi piacerebbe usare questo è:

select id, mad(values) from mytable group by id; 

Sto andando dalla funzione di aggregazione example ma sono un po 'confuso in quanto la funzione ha bisogno di conoscere la mediana di tutti i numeri prima di tutte le iterazioni sono fatti.

Qualsiasi suggerimento su come una tale funzione potrebbe essere implementata sarebbe molto apprezzato.

risposta

9

In Oracle 10g+:

SELECT MEDIAN(ABS(value - med)) 
FROM (
     SELECT value, MEDIAN(value) OVER() AS med 
     FROM mytable 
     ) 

, o lo stesso con la GROUP BY:

SELECT id, MEDIAN(ABS(value - med)) 
FROM (
     SELECT id, value, MEDIAN(value) OVER(PARTITION BY id) AS med 
     FROM mytable 
     ) 
GROUP BY 
     id 
Problemi correlati