宣言
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