【发布时间】:2015-02-17 16:57:08
【问题描述】:
我正在尝试编写一个查询,该查询从结果集的平均值中排除超过 6 个标准差的值。我希望这可以通过子查询优雅地完成,但我无处可去,在我读过的每一个类似情况下,目标似乎只是一点不同。我的结果集似乎仅限于一行,我猜是由于调用了聚合函数。从概念上讲,这就是我所追求的:
SELECT t.Result FROM
(SELECT Result, AVG(Result) avgr, STD(Result) stdr
FROM myTable WHERE myField=myCondition limit=75) as t
WHERE t.Result BETWEEN (t.avgr-6*t.stdr) AND (t.avgr+6*t.stdr)
我可以通过将 STD 或 AVG 值(即 t.avgr)的每次使用替换为它自己的 select 语句来使其工作:
(SELECT AVG(Result) FROM myTable WHERE myField=myCondition limit=75)
但这似乎比我预期的要混乱得多(我有几个条件)。起初我认为指定 HAVING 子句是必要的,但随着我了解的更多,它似乎并不是我所追求的。我接近了吗?是否有一些时髦的方法可以访问聚合函数的值以在条件中使用(无需返回聚合值)?
【问题讨论】:
标签: mysql statistics standard-deviation