Sql 如何检测数据库中的异常数据点

Sql 如何检测数据库中的异常数据点,sql,machine-learning,sql-server-2008-r2,data-cleaning,Sql,Machine Learning,Sql Server 2008 R2,Data Cleaning,我现在有一个数据库,上面有一些错误的价格标签 示例数据: Product - Price - SalesDate ProdA - 10 - 1/1/2016 ProdB - 20 - 1/2/2016 ProdA - 100 - 1/3/2016 ProdB - 20 - 1/4/2016 ProdB - 21 - 1/5/2016 ProdA - 11 - 1/6/2016 在该数据集上,“ProdA-100-1/3/2016”记录是有错误的记录。可能是输入价格的人打错

我现在有一个数据库,上面有一些错误的价格标签

示例数据:

Product - Price - SalesDate
ProdA  - 10  - 1/1/2016
ProdB  - 20  - 1/2/2016
ProdA  - 100 - 1/3/2016
ProdB  - 20  - 1/4/2016
ProdB  - 21  - 1/5/2016
ProdA  - 11  - 1/6/2016
在该数据集上,“ProdA-100-1/3/2016”记录是有错误的记录。可能是输入价格的人打错了字。此外,ProdA在不同的日期可以改变它的价格,这使得这个问题很有趣


什么样的工具可以帮助我识别此类记录?SQL可以帮助我检测异常数据点吗?我应该开始研究机器学习吗?

这有点主观,但您可以确定哪些行的值与平均值相差最大。我会通过计算z分数并查看最大/最小的z分数来实现这一点

z分数是值减去平均值除以标准偏差。以下是计算示例:

select t.*,
       (price - avg_price) / nullif(std_price, 0) as z_price
from t join
     (select product, avg(price) as avg_price, stdev(price) as std_price
      from t
      group by product
     ) tt
     on t.product = tt.product
order by abs(z_price) desc;

标准偏差的函数可能会有所不同,具体取决于您使用的数据库,但大多数数据库都支持此函数。

您应该用您使用的数据库标记您的问题。