回答

收藏

SQL:显示标准偏差内的平均值和最小值/最大值

技术问答 技术问答 250 人阅读 | 0 人回复 | 2023-09-12

我有以下SQL表-. x* ?; w0 F2 ^  Z
Date       StoreNo       Sales23/4         34     432333.0023/4            23      564.0024/4           34     234555.00etc我正在运行一个查询,将平均销售额、最高销售额和最低销售额返回最低销售额-  k% ?$ @) v  h# t, W
select avg(Sales),max(sales),min(sales)from tbl_saleswhere date between etc然而,在最小值和最大值中确实有一些非常极端的值-可能是因为数据输入错误,也可能是因为日期和存储异常。7 J+ }/ x6 k  y& b! a
我想要的是一个返回平均值、最大值和最小值的查询,但以某种方式排除了极值。我对此开放,但我可能会以某种方式使用标准偏差(例如,只使用真正的平均值)x std
+ \  x' J* |  O8 C( u" z8 L, h& gdevs中等数据)。
6 I: h3 F0 M' ]' d. y2 C7 L* M非常感谢5 n: j( I$ ^- p
                                                               
5 \5 t" o9 l6 I9 ^& M: Q6 X" v. U, Y    解决方案:                                                               
% \; J  w( `8 O* N! q, G                                                                为了计算标准偏差,您需要遍历所有元素,因此不可能在查询中执行此操作。懒惰的方法是通过两次:; o& _" H$ P1 X. i4 D* Q* Q
DECLARE    @Avg int,   @StDev intSELECT @Avg = AVG(Sales),@StDev = STDEV(Sales)FROM tbl_salesWHERE ...SELECT AVG(Sales) AS AvgSales,MAX(Sales) AS MaxSales,MIN(Sales) AS MinSalesFROM tbl_salesWHERE ...AND Sales >= @Avg - @StDev * 3AND Sales 可能    另一个简单的选择是只删除最小和最大 x/ v9 `$ F8 B7 I! S" b6 n
如果要处理大量数据,可以使用此选项。您可以使用它ROW_NUMBER本操作执行以下语句:+ W2 @+ p# T9 e! ?; a- W
WITH OrderedValues AS(    SELECT        Sales,       ROW_NUMBER() OVER (ORDER BY Sales) AS RowNumAsc,       ROW_NUMBER() OVER (ORDER BY Sales DESC) AS RowNumDesc)SELECT ...FROM tbl_salesWHERE ...AND Sales >(    SELECT MAX(Sales)    FROM OrderedValues    WHERE RowNumAsc 如果你想放弃一定数量的 唯一    值,请替换ROW_NUMBER为RANK或。DENSE_RANK __
& G* `3 @$ q( w1 {( K) S除了这些简单的技能,你还可以开始获得一些非常重要的统计数据。我必须处理类似的验证,所以对SO就帖子而言,材料太多了。您可以以12种不同的方式调整100种不同的算法。如果可能的话,我会尽量保持简单!
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则