Mysql 使用具有条件的其他字段的总和更新字段

Mysql 使用具有条件的其他字段的总和更新字段,mysql,Mysql,我的表格结构如下 counter1|counter1_status|counter2|counter2_status|counter3|counter3_status|valid_counter ----------------------------------------------------------------------------------------- 5 0 6 1

我的表格结构如下

counter1|counter1_status|counter2|counter2_status|counter3|counter3_status|valid_counter
-----------------------------------------------------------------------------------------
 5                 0             6            1               3               1                XXXX
我需要一个更新查询来将有效的\u计数器更新为6+3=9 由于计数器1_status=0,因此不应添加计数器1

尝试执行以下查询,但出现错误

UPDATE counter_table SET valid_contact = SUM((CASE WHEN counter1_status=1 THEN counter1 ELSE 0 END) + (CASE WHEN counter2_status=1 THEN counter2 ELSE 0 END) + (CASE WHEN counter3_status=1 THEN counter3 ELSE 0 END))
我可以使用SELECT query(选择查询)获得总和,但Update query(更新查询)失败。

如果要有条件地将计数器1、计数器2、计数器3的总和存储在有效的\u contace字段中,可以使用:

UPDATE counter_table 
SET valid_contact = 
(CASE WHEN counter1_status=1 THEN counter1 ELSE 0 END) 
+ (CASE WHEN counter2_status=1 THEN counter2 ELSE 0 END) 
+ (CASE WHEN counter3_status=1 THEN counter3 ELSE 0 END)
where id=5

如果要在valid_contace字段中有条件地存储计数器1、计数器2和计数器3的总和,可以使用:

UPDATE counter_table 
SET valid_contact = 
(CASE WHEN counter1_status=1 THEN counter1 ELSE 0 END) 
+ (CASE WHEN counter2_status=1 THEN counter2 ELSE 0 END) 
+ (CASE WHEN counter3_status=1 THEN counter3 ELSE 0 END)
where id=5

最终得到了错误的解决方案:

应从查询中删除SUM

应该是SUMa,b,c

或者a+b+c

更新计数器表 设置有效的\u联系人= 当计数器1\u状态=1时,则计数器1否则0结束 +当计数器2_状态=1时,则计数器2否则0结束
+当counter3_status=1时,然后counter3 ELSE 0 END

最终得到错误的解决方案:

应从查询中删除SUM

应该是SUMa,b,c

或者a+b+c

更新计数器表 设置有效的\u联系人= 当计数器1\u状态=1时,则计数器1否则0结束 +当计数器2_状态=1时,则计数器2否则0结束
+如果计数器3_status=1,则计数器3 ELSE 0 END

会给您带来什么错误?1111-组功能的无效使用请参阅规范化。任何不建议标准化的答案都只是浪费您的时间。它会给您带来什么错误?1111-组功能的无效使用请参阅标准化。任何不建议标准化的答案都是在浪费你的时间。你已经试过了。它还给出了错误-1093-您不能从第条中指定更新的目标表“counter_table”,我无法判断OP是否希望所有记录都具有相同的聚合值。@PramodSahoo我编辑了查询,它解决了您的问题吗?不,我需要一个记录更新,我将使用where条件end@PramodSahoo请把你的密码贴在你试过的地方。它还给出了错误-1093-您不能从第条中指定更新的目标表“counter_table”,我无法判断OP是否希望所有记录都具有相同的聚合值。@PramodSahoo我编辑了查询,它解决了您的问题吗?不,我需要一个记录更新,我将使用where条件end@PramodSahoo请张贴你的where条款