如何过滤mySQL中的异常值?

时间:2015-01-22 23:02:18

标签: mysql

我试图在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个单独的查询以及连接或子查询,但我无法弄明白。

1 个答案:

答案 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

我不能像你的例子那样给你答案,因为你的例子没有多大意义。