用GROUP BY 分组求平均时怎样去掉每组中的0?
我现在有一个表DF_MMA,里面的数据一部分如下:参数1 参数2 参数3 参数4 参数5 参数6
1 2011-11-22 18:08:40 0 202.7 247.81 27.478
2 2011-11-22 18:09:10 0 187.13 193.2 33.372
3 2011-11-22 18:09:40 20.38 302.5 68.004 33.284
4 2011-11-22 18:10:10 21.43 215.16 297.8 24.245
5 2011-11-22 18:10:40 0 381.65 192.99 39.975
6 2011-11-22 18:11:11 23.45 151.97 274.4 26.69
7 2011-11-22 18:11:40 0 144.99 302.27 23.464
8 2011-11-22 18:12:10 21.99 374.47 102.31 36.666
9 2011-11-22 18:12:40 0 285.54 166.69 29.831
10 2011-11-22 18:13:10 0 325.57 264.92 57.298
11 2011-11-22 18:13:40 20.35 698.3 287.26 106.82
12 2011-11-22 18:14:10 17.98 162.2 319.35 5.6648
13 2011-11-22 18:14:40 0 38.046 459.51 5.2741
14 2011-11-22 18:15:10 0 17.594 471.84 4.6087
15 2011-11-22 18:15:40 0 167.5 155.64 21.886
16 2011-11-22 18:16:10 0 39.786 443.74 4.9567
17 2011-11-22 18:16:40 0 17.32 471.42 4.5384
18 2011-11-22 18:17:10 0 278.82 94.905 29.432
19 2011-11-22 18:17:40 0 262.19 113.13 36.358
20 2011-11-22 18:18:10 18.63 247.38 82.002 35.766
21 2011-11-22 18:18:40 18 150.32 198.72 25.201
22 2011-11-22 18:19:10 19.34 267.83 159.11 30.912
23 2011-11-22 18:19:40 19.43 263.37 53.932 33.546
24 2011-11-22 18:20:10 19.95 239.26 51.279 30.238
25 2011-11-22 18:20:40 19.16 297.19 71.963 34.786
26 2011-11-22 18:21:10 18.84 304.85 154.49 39.401
27 2011-11-22 18:21:40 19.47 198.75 110.92 29.752
28 2011-11-22 18:22:10 19.61 234.19 68.483 33.601
29 2011-11-22 18:22:39 0 186.63 153.72 28.061
30 2011-11-22 18:23:09 19.12 264.82 125.91 28.433
我现在想把这些数据每10个一组取出参数3的平均值,以及参数2的最小最大值,SQL语句如下:
SELECT (参数1-1)\10+1,MIN(参数2),MAX(参数2),AVG(参数3) FROM DF_MMA
WHERE 参数2 >= #2011-11-22 18:08:40# AND 参数2 <= #2011-11-22 18:18:10#
GROUP BY (参数1-1)\10+1;
执行结果如下:
1 2011-11-22 18:08:40 2011-11-22 18:13:10 8.725000
2 2011-11-22 18:13:40 2011-11-22 18:18:10 5.696000
现在的问题是,AVG(参数3) 这个算出来的是每个分组中10个数的平均值,无论里面有没有0,我现在想实现在分组求平均的时候先去掉0元素再算平均。比如第一个分组里有6个0,算平均的时候分母就是4(10-6),而不是10,其他所有组都这样,怎么实现啊~多谢各位指点啦~
[ 本帖最后由 zhsql 于 2011-12-5 10:10 编辑 ]