2010-10-31 81 views
6

我试图执行一个程序来评估一组数字(通常通过GROUP BY子句获得)的median absolute deviation评估Oracle中一组数字的平均绝对偏差

查询,我想使用这个的一个例子是:

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

我集合函数example去,但我有点困惑,因为函数需要知道所有的中位数所有迭代之前的数字都已完成。

任何指示如何实现这样的功能将不胜感激。

回答

9

Oracle 10g+

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

,或者与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