0

さまざまな場所でのイベントの調査テーブルの評価を定義する一連のデータがあります。

各場所の平均評価を、最後の行のすべての場所の平均とともに表示しようとしています。

現時点では、私のクエリは次のようになっています。

SELECT 
IFNULL(l.title, 'Total') AS location,
ROUND(AVG(NULLIF(s.rating, 0)), 2) AS rating
FROM surveys s 
INNER JOIN events e
ON e.id = s.event_id
INNER JOIN locations l
ON l.id = e.location_id
GROUP BY l.title WITH ROLLUP

これにより、場所ごとに次の値が得られます。

8.22, 8.67, 8.67, 8.56, 7.86, 8.50. 8.78, 7.33

ただし、最終的な合計は8.37として返されますが、実際には8.32である必要があります。

私は何か間違ったことをしていますか?

4

1 に答える 1

1

ロールアップは、テーブル全体のCOUNTとSUMを使用してから、除算を行います。増分結果を使用せず、それらを平均します。

増分結果を小数点以下2桁に四捨五入していますが、実際の値はそうではありません。真の値を出力すると、平均がより理にかなっていることがわかります。

SUMとCOUNTも出力して、自分で確認できるようにしてください。

于 2011-11-03T10:28:48.260 に答える