db2 如何使用标准差去除离群值?

h7wcgrx3  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(228)

我有一组查询结果,看起来有点像这样:

customer|sales_growth_percentage
--------|-----------------------
A       |0.00
B       |0.00
C       |0.00
D       |15.05
E       |20.00
F       |25.10
G       |30.00
H       |500.00
I       |600.20

我想做的是计算以下各项,同时排除销售增长中的任何统计异常值(例如,客户H & I):

count(customer),
sum(sales_growth_percentage)

我知道我可以使用STDDEV函数计算标准差,在上面的例子中,我得到的结果是224.84。请问,有人知道如何使用这个函数来排除异常值吗?异常值真的是销售增长率高于224.84的任何东西吗?
我假设我可以将标准差保存为变量,将查询结果保存到临时表中,然后从sales_growth_percentage〈=224.84的临时表中进行选择。这是最好的方法吗?还是有更有效的方法?
任何帮助都将不胜感激!

ffscu2ro

ffscu2ro1#

您可以预先计算CTE中的平均值和标准差,然后在主查询中使用它。例如:

with
stats (av, st) as (
  select avg(sales_growth_percentage), stddev(sales_growth_percentage) from t
)
select *
from t
cross join stats s
where t.sales_growth_percentage between s.av - s.st and s.av + s.st

结果:

CUSTOMER  SALES_GROWTH_PERCENTAGE  AV                           ST              
 --------- ------------------------ ---------------------------- --------------- 
 A         0.00                     132.26111111111111111111111  224.83562857462 
 B         0.00                     132.26111111111111111111111  224.83562857462 
 C         0.00                     132.26111111111111111111111  224.83562857462 
 D         15.05                    132.26111111111111111111111  224.83562857462 
 E         20.00                    132.26111111111111111111111  224.83562857462 
 F         25.10                    132.26111111111111111111111  224.83562857462 
 G         30.00                    132.26111111111111111111111  224.83562857462

请参阅db<>fiddle上的运行示例。

ldxq2e6h

ldxq2e6h2#

您可以使用相应的OLAP函数:

/*
WITH MYTAB (customer, sales_growth_percentage) AS
(
VALUES
  ('A',   0.00)
, ('B',   0.00)
, ('C',   0.00)
, ('D',  15.05)
, ('E',  20.00)
, ('F',  25.10)
, ('G',  30.00)
, ('H', 500.00)
, ('I', 600.20)
)

* /

SELECT *
FROM
(
SELECT 
  T.*
, STDDEV (sales_growth_percentage) OVER () AS ST 
, AVG (sales_growth_percentage) OVER ()    AS AV
FROM MYTAB T
)
WHERE sales_growth_percentage BETWEEN AV - ST AND AV + ST;

其结果是:
| 客户|销售_增长_百分比|标准时间|视听|
| - -|- -|- -|- -|
| A级|0.00分|224.33569999994| 132.261111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|
| B| 0.00分|224.33569999994| 132.261111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|
| C类|0.00分|224.33569999994| 132.261111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|
| D级|十五点零五分|224.33569999994| 132.261111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|
| E级|20点整|224.33569999994| 132.261111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|
| F级|二十五元一角|224.33569999994| 132.261111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|
| G级|30点整|224.33569999994| 132.261111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|

相关问题