2017-05-23 8 views
0

に私はこのような何かを達成しよう:挿入avarage値表2

UPDATE Users 
SET totalPayed = AVG(p.paymentMade) 
FROM Payments p 
WHERE Users.username = p.username; 

エラーメッセージ:

An aggregate may not appear in the set list of an UPDATE statement. 

どのように私はSETラインでAVGを使用せずにこの問題を解決することができますか?

+1

どのデータベース(MySQL、SQL Serverなど)を使用していますか? –

+1

どのRDMSを使用していますか? mysql、oracel、mssql? – Arion

+0

それを見逃して申し訳ありません:mssql。 – Julez

答えて

1

あなたはサブクエリでavgを行うことによって、それを達成することができますし、 usernameを使用してメインテーブルに結合し、totalpayedを更新します。

UPDATE U 
    SET totalPayed=p.avg_payment 
FROM Users U 
INNER JOIN 
(SELECT username,AVG(p.paymentMade) avg_payment 
    FROM Payments 
    GROUP BY username) P ON U.username =p.username 
+0

すごい、それはそれをしました。ありがとうございました。 – Julez

0

私はあなたがサブクエリを使用してこれを解決できると思います。このように:

UPDATE Users 
SET totalPayed = 
(
    SELECT AVG(p.paymentMade) 
    FROM Payments p 
    WHERE Users.username = p.username; 
) 

事はあなたが支払いを持たないユーザーのために、その後JOINを使用している場合は、値を設定していないということです