我有一个category
列的表格为
category enum('A', 'B', 'C'),
我如何UPDATE
整个表格将A
分配给1/3行,B
到1/3行,C
到1/3行(没有特定的顺序)?
答案 0 :(得分:2)
据推测,这是一次性的事情:
UPDATE table1 SET category = 'A' WHERE category IS NULL ORDER BY RAND() LIMIT X;
UPDATE table1 SET category = 'B' WHERE category IS NULL ORDER BY RAND() LIMIT X;
UPDATE table1 SET category = 'C' WHERE category IS NULL;
其中X是表中总行数的1/3
SELECT FLOOR(COUNT(*) / 3) x FROM table1;
答案 1 :(得分:0)
也许随机分配?假设您有足够的行,导致分布均匀。
CASE ROUND(RAND() * 2,0)
WHEN 0 then 'A'
WHEN 1 then 'B'
WHEN 2 then 'C'
END CASE as Result
答案 2 :(得分:0)
在单个语句中执行此操作的另一个选项,无需事先知道您的记录计数:
UPDATE table, (select @s:=0) as s
SET category =
CASE
WHEN MOD(@s:=@s+1, 3)=1 THEN 'A'
WHEN MOD(@s, 3)=2 THEN 'B'
ELSE 'C'
END;
使用变量生成行号,然后我们可以使用mod()
检查它的值,为其赋予三个值之一。如果您的表上有一个自动增量字段是连续的并且没有删除的行,那么您可以使用该字段而不是变量。