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

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

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

  1. customer|sales_growth_percentage
  2. --------|-----------------------
  3. A |0.00
  4. B |0.00
  5. C |0.00
  6. D |15.05
  7. E |20.00
  8. F |25.10
  9. G |30.00
  10. H |500.00
  11. I |600.20

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

  1. count(customer),
  2. sum(sales_growth_percentage)

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

ffscu2ro

ffscu2ro1#

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

  1. with
  2. stats (av, st) as (
  3. select avg(sales_growth_percentage), stddev(sales_growth_percentage) from t
  4. )
  5. select *
  6. from t
  7. cross join stats s
  8. where t.sales_growth_percentage between s.av - s.st and s.av + s.st

结果:

  1. CUSTOMER SALES_GROWTH_PERCENTAGE AV ST
  2. --------- ------------------------ ---------------------------- ---------------
  3. A 0.00 132.26111111111111111111111 224.83562857462
  4. B 0.00 132.26111111111111111111111 224.83562857462
  5. C 0.00 132.26111111111111111111111 224.83562857462
  6. D 15.05 132.26111111111111111111111 224.83562857462
  7. E 20.00 132.26111111111111111111111 224.83562857462
  8. F 25.10 132.26111111111111111111111 224.83562857462
  9. G 30.00 132.26111111111111111111111 224.83562857462

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

展开查看全部
ldxq2e6h

ldxq2e6h2#

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

  1. /*
  2. WITH MYTAB (customer, sales_growth_percentage) AS
  3. (
  4. VALUES
  5. ('A', 0.00)
  6. , ('B', 0.00)
  7. , ('C', 0.00)
  8. , ('D', 15.05)
  9. , ('E', 20.00)
  10. , ('F', 25.10)
  11. , ('G', 30.00)
  12. , ('H', 500.00)
  13. , ('I', 600.20)
  14. )
  15. * /
  16. SELECT *
  17. FROM
  18. (
  19. SELECT
  20. T.*
  21. , STDDEV (sales_growth_percentage) OVER () AS ST
  22. , AVG (sales_growth_percentage) OVER () AS AV
  23. FROM MYTAB T
  24. )
  25. 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|

展开查看全部

相关问题