使用下列语句:
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位以后的数字完全不一样了。
这是为什么呢?哪个算法是最准确的?

解决方案 »

  1.   


    这里要注意一点,就是 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(*)
      

  2.   

    SELECT count(*) from t_src_rtdb where `NAME` = 'CZ3-A999'' AND (SECONDS >= 1351632073 AND SECONDS < 1351718473) AND `VALUE` >=0.50000000 and `VALUE` <= 5.00000000;注意红色部分是两个单引号。显然楼主使用的语句并不一致。
      

  3.   

    Quote: 引用 1 楼 yupeigu 的回复:
    这里要注意一点,就是 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(*)[/quote
    mysql是这样的
      

  4.   

    但是通过下面的语句:
    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求出的数一不样。这是什么原因