我有一個category
列的表作爲UPDATE一個MySQL表來分配該列的值成比例地
category enum('A', 'B', 'C'),
我怎樣才能UPDATE
整個表分配給A
行的1/3,B
到1/3行,並且C
到1/3行(不按特定順序)?
我有一個category
列的表作爲UPDATE一個MySQL表來分配該列的值成比例地
category enum('A', 'B', 'C'),
我怎樣才能UPDATE
整個表分配給A
行的1/3,B
到1/3行,並且C
到1/3行(不按特定順序)?
也許隨機分配?假設你有足夠的行,結果分佈將是統一的。
CASE ROUND(RAND() * 2,0)
WHEN 0 then 'A'
WHEN 1 then 'B'
WHEN 2 then 'C'
END CASE as Result
想必它在這裏一次性件事就是做這件事:
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;
另一種選擇爲了在一個聲明中做到這一點,無需事先知道您的記錄數:
UPDATE table, (select @s:=0) as s
SET category =
CASE
WHEN MOD(@s:[email protected]+1, 3)=1 THEN 'A'
WHEN MOD(@s, 3)=2 THEN 'B'
ELSE 'C'
END;
使用一個變量來創建一個行號,我們可以使用mod()
來檢查它的值,給它三個值之一。如果您的表中有順序的自動增量字段,並且沒有刪除的行,則可以使用該字段而不是變量。