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

问题描述 投票:0回答:2

我正在尝试实现一个程序来评估一组数字的“中值绝对偏差”(通常通过 GROUP BY 子句获得)。 我想使用它的查询示例是:

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

我将使用聚合函数
示例

,但我有点困惑,因为该函数需要在完成所有迭代之前知道所有数字的中位数。 任何有关如何实现此类功能的指示将不胜感激。

sql oracle aggregate
2个回答
12
投票
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



0
投票

SELECT id, ABS(ROUND(MEDIAN(dur - med))) as stmed FROM ( SELECT id, (end - start)*86400 as dur, MEDIAN((end - start)*86400 ) OVER() AS med FROM mytable WHERE STATUS = 'SUCCESS' ) GROUP BY id;

我使用了@Quassnoi的答案,但必须对其进行调整才能计算经过时间的中值绝对偏差(MAD)。

我查询的表包含运行的进程的实例。开始列和结束列表明进程运行需要多长时间。我想知道某个过程是否花费了太长的时间,或者它是否运行得不够长但仍然成功(误报)。

但是,持续时间不服从正态分布,因此标准差没有给我提供可靠的信息。

下一步是从考虑中删除异常值,以获得更准确的正常运行时间,一旦弄清楚,我将更新此答案。

© www.soinside.com 2019 - 2024. All rights reserved.