SQL AVG()函数返回不正确的值

时间:2012-11-08 10:30:21

标签: sql average

我想在sql中使用AVG函数来返回某些值的工作平均值(即基于上周而不是整体平均值)。我有两个正在计算的值,体重 restingHR (心率)。我对每个语句都有以下sql语句:

SELECT AVG( weight ) AS average 
FROM   stats 
WHERE  userid='$userid' 
ORDER BY date DESC LIMIT 7

SELECT AVG( restingHR ) AS average 
FROM   stats 
WHERE  userid='$userid' 
ORDER BY date DESC LIMIT 7

我获得的重量的值是 82.56 ,但它应 83.35 这不是一个大的错误,当我使用它时,我正在将它四舍五入,所以它不是一个大问题。

然而对于 restHR ,当 57.57 时, 45.56 ,这是一个巨大的差异。

我不明白为什么会这么错。非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:8)

使用子查询分隔选择计算平均值的行:

SELECT AVG(weight) average
FROM (SELECT weight
      FROM stats
      WHERE userid = '$userid'
      ORDER BY date DESC
      LIMIT 7) subq

答案 1 :(得分:2)

您似乎希望使用ORDER BY date DESC LIMIT 7过滤数据,但必须考虑ORDER BY子句在完成其他所有操作后生效。因此,您的AVG()函数会考虑来自$userId的restHR的所有值,而不仅仅是最新的7个。

要克服这个问题......好吧,Barmar刚刚发布了一个查询。