我试图在mySQL数据集中过滤异常值但没有成功。我想计算一个按日期细分的列的平均值,不包括超出平均值2个标准偏差的值。
示例表:
+---------------------+----------+
| date_time | duration |
+---------------------|----------+
| 2015-01-01 00:01:00 | 1 |
| 2015-01-01 00:02:00 | 2 |
| 2015-01-01 00:02:20 | 23 |
| 2015-01-01 00:03:10 | 3 |
| 2015-01-02 00:01:00 | 3 |
| 2015-01-02 00:02:00 | 4 |
| 2015-01-02 00:02:20 | 52 |
| 2015-01-02 00:03:10 | 5 | ...
如何获得持续时间列的平均值,不包括异常值“23”和“52”,它们远远超出平均值的2个标准偏差?
我想得到一个结果:
+------------+---------+
| date | average |
+------------+---------|
| 2015-01-01 | 2 |
| 2015-02-01 | 4 |
我认为我需要2个单独的查询以及连接或子查询,但我无法弄明白。
答案 0 :(得分:2)
SELECT AVG(value)
FROM yourtable yt
INNER JOIN (SELECT AVG(value) AS avrg, STDDEV(value) AS stdv
FROM your table ) ilv
ON yt.value BETWEEN avrg-2*stdv AND avrg+2*stdv
我不能像你的例子那样给你答案,因为你的例子没有多大意义。