【问题标题】:MySQL Ignoring Outliers with Standard DeviationsMySQL忽略具有标准偏差的异常值
【发布时间】:2017-09-05 16:06:14
【问题描述】:

我需要构建一个查询来计算平均值和计数,同时忽略标准偏差中的异常值。

Mysql 中有两个表(P 和 A),具有以下属性:

P = 付款:

Value_gbp
Paymentid
Account 
rfx_ref

A = 帐户:

Accountid
Entity_type
Settlment_model
rfx_ref

到目前为止,我得到了这个:

SELECT 
Account, 
COUNT(value_GBP) AS '# Of Payments', 
TRUNCATE(AVG(value_GBP),2) As 'Avg Value'
FROM payments, 

LEFT JOIN( 
SELECT STDDEV(value_gbp) as std_gbp
FROM payments, accounts 
WHERE payments.paymentid = accounts.acountid
AND Entity_type = 'company'
AND settlement_model = 'payment agent'
GROUP BY account
) outlier 

On payments.paymentid = accounts.acountid
WHERE payments.value_gbp<=outlier.std_gbp*2
AND Entity_type = 'company'
AND settlement_model = 'payment agent'
GROUP BY account

但它正在下降,说明:

On payments.paymentid = accounts.acountid

谁能帮帮我?

【问题讨论】:

  • LEFT JOIN之前不能有逗号
  • 主查询不能访问子查询中的表。
  • 在未来,最好向我们展示实际的错误消息,而不是猜测您的错误在哪里
  • 您的顶级JOIN 不知道accounts DB。你需要用outlier 代替JOIN

标签: mysql sql outliers


【解决方案1】:

子查询需要选择accounts.accountid,然后你需要在JOIN条件下使用这个。

我也认为您对异常值的定义是错误的。它不应该超过 2 个标准偏差,它应该比平均值超过 2 个标准偏差。所以子查询需要同时返回平均值和标准差,然后你比较距离。

SELECT 
    account, 
    COUNT(value_GBP) AS '# Of Payments', 
    TRUNCATE(AVG(value_GBP),2) As 'Avg Value'
FROM payments 
JOIN( 
    SELECT accountid, AVG(value_gpb) AS avg_gbp, STDDEV(value_gbp) as std_gbp
    FROM payments, accounts 
    WHERE payments.paymentid = accounts.acountid
    AND Entity_type = 'company'
    AND settlement_model = 'payment agent'
    GROUP BY accountid
) outlier 
On payments.paymentid = outlier.accountid
JOIN accounts ON payments.paymentid = accounts.accountid
WHERE ABS(payments.value_gbp - outlier.avg_gpb) <= outlier.std_gbp*2
AND Entity_type = 'company'
AND settlement_model = 'payment agent'
GROUP BY account

【讨论】:

  • 嗨,这个查询不起作用。它落在最后一个 WHERE 子句上 - SQL 不会识别“实体类型”或“结算模型”。有什么办法解决这个问题?
  • 对,需要再次加入accounts才能得到。
猜你喜欢
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
相关资源
最近更新 更多