次の表を検討してください。
users messages
------------------- ----------------------
user_id avg_quality msg_id user_id quality
------------------- ----------------------
1 1 1 1
2 2 1 0
3 3 1 0
4 1 1
5 1 1
6 2 0
7 2 0
8 3 1
messages.quality
またはのいずれ0
か1
です。ユーザーごとの平均メッセージ品質を計算し、users.avg_quality
それに応じて更新する必要があります。したがって、目的の出力は次のようにusers
テーブルを変更します。
users
-------------------
user_id avg_quality <-- DECIMAL (8,2)
-------------------
1 0.60 <-- (3x1 + 2x0) / 5
2 0.00 <-- (2x0) / 2
3 1.00 <-- (1x1) / 1
私はこのようにクエリを開始しました。構文が正しくないことはわかっていますが、それ以上のアイデアはありません。あなたは?
UPDATE messages m, users u
SET avg_quality = (SELECT COUNT(m.msg_id) / SUM(m.quality))
WHERE m.user_id = u.user_id