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

Hen*_*ons 2 sql average

我想在sql中使用AVG函数来返回某些值的工作平均值(即基于上周而不是整体平均值).我有两个值,我正在计算,体重休息HR(心率).我为每个语句都有以下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
Run Code Online (Sandbox Code Playgroud)

我得到的重量值是82.56,但它应该是83.35 这不是一个大的错误,当我使用它时我正在舍入它所以它不是太大的交易.

然而,对于restingHR我得到45.96当它应该是57.57这是一个巨大的差异.

我不明白为什么会这么错.任何帮助深表感谢.

谢谢

Bar*_*mar 8

使用子查询将选择行与计算平均值分开:

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

  • +1:只是添加到这个答案,因为它没有明确说明为什么这是必要的:`LIMIT 7`限制可以输出多少行.在聚合时,提供给聚合的记录数根本不受影响.例如,`SELECT x,AVG(y)FROM z GROUP BY x ORDER BY x LIMIT 7`将返回7个不同的`x`值的结果,但每行可以是每行一百万行的总和.在您的情况下,您希望限制聚合的行数.通过使用子查询,您可以使用"LIMIT"仅选择7行,然后使用外部查询进行聚合. (2认同)