SQL服务器:找到偏离值的实例
SQL Server : find Instance of values that deviate
场景:我有多个账户的账单,存储在 SQL 服务器数据库中,持续了几个月。
即
AccountNum BillNum BillMonth BillTotal
---------------------------------------------------
123456 123456-1 201601 0000.00
123456 123456-2 201602 0000.00
123456 123456-3 201603 0000.00
123456 123456-4 201604 0000.00
456789 456789-1 201601 0000.00
456789 456789-2 201602 0000.00
456789 456789-3 201603 0000.00
456789 456789-4 201604 0000.00
我正在尝试编写一个查询,该查询将显示 outliers/deviations 在给定时间段内相差 > xx%。因此,在上面的数据集中,第 4 行和第 8 行与我认为的 "normal" 100,000 美元 p/month 的金额有很大不同 p/month,这可能表明存在问题。
我需要一种方法来按帐户平均账单(因为每个帐户都有不同的 bill/charges 等)并找出给定月份的偏差超过 10% 的地方。
我尝试过使用 STDEV,但无法完全解决。
您可以尝试使用以下查询:
SELECT AccountNum, BillNum, BillMonth, BillTotal,
CASE
WHEN ABS(BillTotal - AVG(BillTotal) OVER (PARTITION BY AccountNum)) >
STDEV(BillTotal) OVER (PARTITION BY AccountNum)
THEN 1
ELSE 0
END AS deviates
FROM mytable
上面的查询 returns a 1
那些记录的 BillTotal
金额与特定 [=13] 字段的平均值的偏差大于标准偏差=].
场景:我有多个账户的账单,存储在 SQL 服务器数据库中,持续了几个月。
即
AccountNum BillNum BillMonth BillTotal
---------------------------------------------------
123456 123456-1 201601 0000.00
123456 123456-2 201602 0000.00
123456 123456-3 201603 0000.00
123456 123456-4 201604 0000.00
456789 456789-1 201601 0000.00
456789 456789-2 201602 0000.00
456789 456789-3 201603 0000.00
456789 456789-4 201604 0000.00
我正在尝试编写一个查询,该查询将显示 outliers/deviations 在给定时间段内相差 > xx%。因此,在上面的数据集中,第 4 行和第 8 行与我认为的 "normal" 100,000 美元 p/month 的金额有很大不同 p/month,这可能表明存在问题。
我需要一种方法来按帐户平均账单(因为每个帐户都有不同的 bill/charges 等)并找出给定月份的偏差超过 10% 的地方。
我尝试过使用 STDEV,但无法完全解决。
您可以尝试使用以下查询:
SELECT AccountNum, BillNum, BillMonth, BillTotal,
CASE
WHEN ABS(BillTotal - AVG(BillTotal) OVER (PARTITION BY AccountNum)) >
STDEV(BillTotal) OVER (PARTITION BY AccountNum)
THEN 1
ELSE 0
END AS deviates
FROM mytable
上面的查询 returns a 1
那些记录的 BillTotal
金额与特定 [=13] 字段的平均值的偏差大于标准偏差=].