You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按1,2,3循环模式更新表中DesiredResultAfterUpdate列?

解决按ID分组循环赋值1、2、3的问题

嘿,我来帮你搞定这个循环赋值的需求!你要的是让DesiredResultAfterUpdate列按照ID每3个一组重复1、2、3的序列,之前的方法只对每第3条数据生效,大概率是取余逻辑没处理好——毕竟当ID是3的倍数时,直接取余会得到0,而不是你要的3。

下面分几种常见数据库给你具体的解决方案:

情况1:ID是连续递增的

如果你的ID是连续没有缺失的(比如1、2、3、4、5、6...),直接用取余+CASE判断就能搞定:

MySQL/MariaDB

UPDATE your_table_name
SET DesiredResultAfterUpdate = CASE
    WHEN MOD(ID, 3) = 0 THEN 3
    ELSE MOD(ID, 3)
END;

SQL Server

UPDATE your_table_name
SET DesiredResultAfterUpdate = CASE
    WHEN ID % 3 = 0 THEN 3
    ELSE ID % 3
END;

PostgreSQL

UPDATE your_table_name
SET DesiredResultAfterUpdate = CASE
    WHEN MOD(ID, 3) = 0 THEN 3
    ELSE MOD(ID, 3)
END;

执行完更新后,你可以用这条语句验证结果:

SELECT ID, DesiredResultAfterUpdate
FROM your_table_name
ORDER BY ID;

应该会得到ID1→1,ID2→2,ID3→3,ID4→1,ID5→2,ID6→3...这样的序列。

情况2:ID存在缺失(不连续)

如果你的ID不是连续的(比如有1、2、4、5、7这种情况),想要按数据的排序顺序来分组循环,就得用窗口函数生成连续的行号,再对行号取余:

MySQL 8.0+/SQL Server/PostgreSQL

UPDATE your_table_name t
JOIN (
    SELECT ID, 
           CASE 
               WHEN MOD(ROW_NUMBER() OVER (ORDER BY ID), 3) = 0 THEN 3
               ELSE MOD(ROW_NUMBER() OVER (ORDER BY ID), 3)
           END AS new_value
    FROM your_table_name
) sub ON t.ID = sub.ID
SET t.DesiredResultAfterUpdate = sub.new_value;

这里ROW_NUMBER() OVER (ORDER BY ID)会按照ID的顺序生成连续的1、2、3、4...序号,再对这个序号做取余处理,就能保证不管ID有没有缺失,都能按顺序循环1、2、3。

内容的提问来源于stack exchange,提问作者Иво Недев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:02:02