宣言
RAND([N])
説明
RAND([N]) 関数は、0個または1個のパラメータ(N はランダムナンバーシードと呼ばれる)を受け取り、範囲 [0,1.0) の乱数浮動小数点数を返します。範囲 [i, j) 内の乱数整数を取得したい場合は、FLOOR(I + RAND() * (j - i)) 式を使用できます。
パラメータ N を指定しない場合、実行前にランダムシードで初期化され、その後 RAND() はこの初期値に基づいてランダム数を生成するため、RAND() は毎回異なるランダム数列を生成します。
パラメータ N を指定すると、N がランダムナンバーシードとして使用され、ランダム数が生成されます。N が定数かどうかによって、以下の2つのケースに分けられます:
Nが定数の場合、Nは実行前にランダムシードとして初期化され、その後RAND(N)はこの初期値に基づいてランダム数を生成します。同じN値は同じランダム数列を生成します。Nが変数の場合(例えばNが列の値の場合)、Nは実行ごとにランダムシードとして使用され、ランダム数が生成されます。同じN値は同じランダム数を生成します。
SECLET ステートメントで使用される以外に、RAND([N]) は WHERE、ORDER BY、および GROUP BY ステートメントでも使用でき、その実行方法は上記のルールに従います。例えば、テーブルをランダムにソートしたい場合は SELECT FROM T1 ORDER BY RAND() を使用できます。テーブルの100行をランダムにサンプリングしたい場合は SELECT FROM T1 ORDER BY RAND() LIMIT 100 を使用できます。
例
obclient> SELECT A, B, RAND() FROM T3;
+------+------+---------------------+
| A | B | RAND() |
+------+------+---------------------+
| 1 | 1 | 0.641815407799385 |
| 2 | 2 | 0.16825051248841966 |
| 3 | 3 | 0.9158063697775886 |
+------+------+---------------------+
3 rows in set