宣言
RANDOM(seed)
説明
この関数は、64ビットの整数の擬似ランダム値を生成します。
seedは整数型であり、異なるseedによって異なるランダム数列が生成されます。RANDOM()はMT19937擬似ランダム数生成アルゴリズムを使用しており、そのランダム空間は非常に広大であり、219937 - 1個のランダム要素を生成した後に初めて同じシーケンスが繰り返し生成されます。
例
以下の例は、RANDOM() を使用してランダム数を生成する方法です。
obclient> SELECT RANDOM(4) FROM TABLE(GENERATOR(3));
+---------------------+
| RANDOM(4) |
+---------------------+
| 5267436225003336391 |
| -851690886662571060 |
| 1738617244330437274 |
+---------------------+
3 rows in set
以下の例は、RANDOM() の結果を分布関数のランダム入力として使用する方法です。
obclient> SELECT UNIFORM(1, 100, RANDOM()) FROM TABLE(GENERATOR(4));
+-------------------------+
| UNIFORM(1,100,RANDOM()) |
+-------------------------+
| 73.61272325544115 |
| 40.25665028115364 |
| 66.83183914022183 |
| 70.22767627040167 |
+-------------------------+
4 rows in set
以下の例は特殊なシナリオであり、RANDOM() のパラメータに変数を指定すると、毎回 seed が再計算されます。
obclient> SELECT * FROM t1;
+------+
| c1 |
+------+
| 3 |
| 4 |
| 5 |
| 1 |
| 1 |
+------+
5 rows in set
obclient> SELECT t1.c1, RANDOM(t1.c1) FROM TABLE(GENERATOR(1)), t1;
+------+----------------------+
| c1 | RANDOM(t1.c1) |
+------+----------------------+
| 3 | 1084041170817055659 |
| 4 | 5267436225003336391 |
| 5 | 192483991702052534 |
| 1 | -6753783847308464280 |
| 1 | -6753783847308464280 |
+------+----------------------+
5 rows in set