使用序列循环更新列集?

Update column set with sequence loop?

我有一个数据库(邮件),里面大约有 533,000 条记录。我正在尝试创建组,本质上,我可以使用它来 select 一个记录区域。我想创建10组人。

所以在 'mailing' 中,我有一个名为 'group' 的列。我想在每条记录中插入一个数字(从 1 到 10)。一旦我达到 10,我想从 1 开始再次循环序列。

更新列后数据库的外观示例 'group'

既然你提到了 InnoDB,我在这里假设 MySQL。

所以我会这样说:

SET @grp:=-1;
UPDATE Table set `Group`=(@grp:=(@grp+1)%10) + 1;

也就是说,我不会采用这种方法,我只是想回答具体问题

Fiddle 这里:http://sqlfiddle.com/#!9/82113/1

我认为这不是管理排除列表和联系策略的正确方法。相反,您应该保留一份列表(在 table 中),其中包含在特定邮寄期间联系的人员。那么下次邮寄的时候,可以选择上次没有邮寄的人。

如果您确实有一些实际业务需要将联系人分为十个 equal-sized 组,然后考虑如何维护:

  • 当人们 added/removed/deleted 时会发生什么?
  • 添加新人时,他们是进入“next-to-be-mailed”组(以便快速收到邮件),还是随机分配到组中?
  • 当新经理出现并想要 8 个组时会发生什么?还是 12?

无论如何,如果您继续采用这种方法,我建议您只是随机分配每个人:

update t
    set grp = floor(rand() * 10);