0

このクエリを実行すると、グループ関数の無効な使用を示すエラー メッセージが表示されます。ケースステートメントの後には、「AS amount」または「AS i.mount」が必要だと確信していますが、mySQlはそれらのいずれも好きではありません。助言がありますか?

update INVITATION AS i 
 LEFT JOIN REGISTRATION AS r on i.id=r.INVITATION_id 
 LEFT JOIN FUNDING AS f on r.id=f.REGISTRATION_id 
 SET i.funding_travel_amount =  SUM(case
when f.category = "Other" then sum(amount) 
when f.category = "Airfare" then sum(amount)
when f.category = "Mileage" then sum(amount)
else 0 end), i.funding_travel = "Custom" 
 WHERE i.funding_hotel = "Prepaid" 
 and i.funding_travel = "None" 
 and i.funding_per_diem = "None" 
 and (f.category = "Other" OR f.category ="Airfare" OR f.category= "Mileage")
 and f.id is not null;
4

2 に答える 2

0

おそらく、金額の前の合計を削除する必要があります。

于 2013-04-01T17:12:04.907 に答える
0

これは、より読みやすいようにフォーマットされたクエリです(少なくとも私にとっては):

update INVITATION i LEFT JOIN
       REGISTRATION r
       on i.id=r.INVITATION_id LEFT JOIN
       FUNDING AS f on r.id=f.REGISTRATION_id 
    SET i.funding_travel_amount = 
            SUM(case when f.category = "Other" then sum(amount) 
                     when f.category = "Airfare" then sum(amount)
                     when f.category = "Mileage" then sum(amount)
                     else 0
                end),
       i.funding_travel = "Custom" 
     WHERE i.funding_hotel = "Prepaid" and
           i.funding_travel = "None" and
           i.funding_per_diem = "None"  and
           (f.category = "Other" OR f.category ="Airfare" OR f.category= "Mileage") and
           f.id is not null;

Onee 問題は明らかです。合計内に合計ステートメントがあります。これを相関サブクエリで記述します。

update INVITATION 
    SET funding_travel_amount = 
            (select SUM(case when f.category = "Other" then amount
                             when f.category = "Airfare" then amount
                             when f.category = "Mileage" then amount
                             else 0
                        end)
             from Registration r join
                  Funding f
                  on r.id=f.REGISTRATION_id and
                  invitation.id = r.invitation_id
            ),
       funding_travel = "Custom" 
     WHERE funding_hotel = "Prepaid" and
           funding_travel = "None" and
           funding_per_diem = "None" 

どのカテゴリも利用できない場合でも金額が更新されるため、これはまったく同じではありません。の追加条件で修正できますwhere

于 2013-04-01T18:01:22.747 に答える