今回は、INSERTやUPDATE文を使用して、1つのカラムに、ランダムにいくつかのデータを入れる方法について解説します。
実際のコード
実際のコードは次のようになります。
1 2 3 4 5 |
UPDATE テーブル名 SET 対象カラム名 = CASE WHEN RAND()<0.1 THEN "APPLE" WHEN RAND()<0.1 THEN "ORANGE" |
このように書くと、約10%のデータにAPPLEが入り、残りの約10%のデータにORANGEが入ります。
つまり、全体の約10%のデータにAPPLE、全体の約90%×10%=9%のデータにORANGEが入ることになります。
RAND()を2回使用していますが、1回目の判定と、2回目の判定では別の値となるので、注意が必要です。
同じ確率で設定する
すべてを同じ割合で設定したい場合、次のようになります。(xで設定したい場合)
1 2 3 4 5 |
UPDATE テーブル名 SET 対象カラム名 = CASE WHEN RAND()<x THEN "APPLE" WHEN RAND()<x/(1-x) THEN "ORANGE" |
例えばすべて0.1…10%のデータに値を入れたい場合、0.1/(1-0.1)=0.1/0.9=0.11111…となるので、次のようになります。
1 2 3 4 5 |
UPDATE テーブル名 SET 対象カラム名 = CASE WHEN RAND()<0.1 THEN "APPLE" WHEN RAND()<0.11111 THEN "ORANGE" |
もっといい方法
もっといい方法があったので、追記します。
1 2 3 4 5 |
UPDATE テーブル名 SET 対象カラム名 = CASE floor(rand*10 + 1) WHEN 1 THEN "APPLE" WHEN 2 THEN "ORANGE" |
こうすると、初めに設定したランダム関数について条件を指定するため、条件ごとに値を変える必要がありません。
詳しく説明すると、floor(rand*10 + 1)で、1~10の値をランダムに作ります。そして、CASE文で、作成した値を条件に、文字列を登録します。
例えば、1/20の確率で値を入れたいときは、floor(rand*10 + 1)をfloor(rand*20 + 1)と書き換えればできます。