使用下列语句:
SELECTIF (
AVG(`VALUE`) IS NULL,
0,
AVG(`VALUE`)
) AS avgValue
FROM
t_src_rtdb
WHERE
`NAME` = 'CZ3-A999'
AND (
SECONDS > 1351632073
AND SECONDS < 1351718473
)
AND `value` >= 0.50000000
AND `value` <= 5.00000000
得到的平均值为:2.8075127382092875
使用下面的语句:
SELECT count(*) from t_src_rtdb where `NAME` = 'CZ3-A999'' AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000;
SELECT sum(`VALUE`) from t_src_rtdb where `NAME` = 'CZ3-A999'' AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000;得到数据分别为:
1440,4042.703461289406 两数相除等于:2.80743296 小数点4位以后的数字完全不一样了。
这是为什么呢?哪个算法是最准确的?
SELECTIF (
AVG(`VALUE`) IS NULL,
0,
AVG(`VALUE`)
) AS avgValue
FROM
t_src_rtdb
WHERE
`NAME` = 'CZ3-A999'
AND (
SECONDS > 1351632073
AND SECONDS < 1351718473
)
AND `value` >= 0.50000000
AND `value` <= 5.00000000
得到的平均值为:2.8075127382092875
使用下面的语句:
SELECT count(*) from t_src_rtdb where `NAME` = 'CZ3-A999'' AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000;
SELECT sum(`VALUE`) from t_src_rtdb where `NAME` = 'CZ3-A999'' AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000;得到数据分别为:
1440,4042.703461289406 两数相除等于:2.80743296 小数点4位以后的数字完全不一样了。
这是为什么呢?哪个算法是最准确的?
解决方案 »
- MYSQL 复制表单A的 id字段的内容的第一段 到表单B的user字段中去!第一段的开头是“/”结尾是"。"
- 无法创建视图
- 请教个设置数据库在线人数问题。
- 执行OPTIMIZE TABLE后,为什么ibdata1文件大小并没有改变?
- 高手请看这个怎么写SQL语句
- (散发)火大!!!!!!!!烦人的 Too many connections
- 一个select的问题,请教各位。
- 创建存储过程失败,到底是什么原因呢。
- MySql创建数据表的问题
- mysql6.3 data文件夹中没有数据库
- mysql主从再做读写分离后,主从复制的延迟对插入或更新一条记录后再查询这条记录的影响有多大呢?我没有再生产中研究这个问题
- mysql5.5数值计算精度问题
这里要注意一点,就是 avg在计算的时候 不会考虑 字段中的null,比如:id
1
2
null
3那么 sum=6,count(*) = 4(当然 如果是 count(id)=3 ),但是avg=6/3 = 2 而不是6/4 =1.5 ,所以avg实际上就是:avg(字段)=sum(字段)/count(字段) 而不是 sum(字段)/count(*)
SELECT count(*) from t_src_rtdb
where `NAME` = 'CZ3-A999'
AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000 and ISNULL(`VALUE`)
VALUE为空的字段个数为0,并不存在NULL值。用
SELECT count(`VALUE`) from t_src_rtdb where `NAME` = 'CZ3-A999 AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000;
SELECT sum(`VALUE`) from t_src_rtdb where `NAME` = 'CZ3-A999 AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000;得到一样是 1440 和 4042.703461289406, 没有变化。依然是2.80743296,与AVG求出的数一不样。这是什么原因