4

SQL で AVG 関数を使用して、いくつかの値の作業平均を返したいと考えています (つまり、全体の平均ではなく先週に基づいています)。私が計算している値は、体重安静時心拍数 (心拍数) の 2 つです。それぞれに次の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の場合、 57.57になるはずのときに45.96になりました。これは大きな違いです。

なぜこれがうまくいかないのか理解できません。どんな助けでも大歓迎です。

ありがとう

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なることを考慮する必要があります。したがって、関数は、最新の 7 だけでなく、からの restingHR のすべての値を考慮します。ORDER BYAVG()$userId

これを克服するために...わかりました、Barmar はクエリを投稿しました。

于 2012-11-08T10:49:27.643 に答える