4

我想在 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 这不是一个大错误,我在使用它时会四舍五入,所以没什么大不了的。

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

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

谢谢

4

2 回答 2

11

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

SELECT AVG(weight) average
FROM (SELECT weight
      FROM stats
      WHERE userid = '$userid'
      ORDER BY date DESC
      LIMIT 7) subq
于 2012-11-08T10:49:48.113 回答
2

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

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

于 2012-11-08T10:49:27.643 回答