评估Oracle中一组数字的平均绝对偏差

rgu*_*uha 7 sql oracle aggregate

我正在尝试实现一个程序来评估一组数字的中位数绝对偏差(通常通过GROUP BY子句获得).

我想要使​​用它的查询示例是:

select id, mad(values) from mytable group by id;
Run Code Online (Sandbox Code Playgroud)

我将通过聚合函数示例,但有点困惑,因为函数需要在完成所有迭代之前知道所有数字的中位数.

任何关于如何实现这样的功能的指针都将非常感激.

Qua*_*noi 11

Oracle 10g+:

SELECT  MEDIAN(ABS(value - med))
FROM    (
        SELECT  value, MEDIAN(value) OVER() AS med
        FROM    mytable
        )
Run Code Online (Sandbox Code Playgroud)

,或与以下相同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
Run Code Online (Sandbox Code Playgroud)