2010-10-31 11 views
6

Estoy tratando de implementar un procedimiento para evaluar el median absolute deviation de un conjunto de números (generalmente obtenido a través de una cláusula GROUP BY).Evaluar la desviación media absoluta de un conjunto de números en Oracle

Un ejemplo de una consulta en la que me gustaría utilizar esto es:

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

Voy por la función de agregado example, pero estoy un poco confuso ya que la función tiene que saber la mediana de todos los números antes de todas las iteraciones están hechas.

Cualquier puntero a cómo podría implementarse dicha función sería muy apreciado.

Respuesta

9

En Oracle 10g+:

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

, o el mismo con el 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 
Cuestiones relacionadas