2017-05-02 70 views

回答

0

也許隨機分配?假設你有足夠的行,結果分佈將是統一的。

CASE ROUND(RAND() * 2,0) 
    WHEN 0 then 'A' 
    WHEN 1 then 'B' 
    WHEN 2 then 'C' 
END CASE as Result 
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; 
0

另一種選擇爲了在一個聲明中做到這一點,無需事先知道您的記錄數:

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()來檢查它的值,給它三個值之一。如果您的表中有順序的自動增量字段,並且沒有刪除的行,則可以使用該字段而不是變量。

相關問題