跳到主要内容

RANDOM

声明

RANDOM(seed)

说明

该函数生成一个 64 位的整数伪随机值。

  • seed 为整数类型,不同 seed 可以生成不同的随机数值序列。
  • RANDOM() 使用了 MT19937 伪随机数生成算法,其随机空间非常大,生成 219937 - 1 个随机元素后才会重复生成相同序列。

示例

如下示例为使用 RANDOM() 生成随机数。

SELECT RANDOM(4) FROM TABLE(GENERATOR(3));
+---------------------+
| RANDOM(4) |
+---------------------+
| 5267436225003336391 |
| -851690886662571060 |
| 1738617244330437274 |
+---------------------+
3 rows in set (0.001 sec)

如下示例为将 RANDOM() 的结果作为分布函数的随机输入。

SELECT UNIFORM(1, 100, RANDOM()) FROM TABLE(GENERATOR(4));
+---------------------------+
| UNIFORM(1, 100, RANDOM()) |
+---------------------------+
| 66 |
| 71 |
| 52 |
| 14 |
+---------------------------+
4 rows in set (0.001 sec)

如下示例为特殊场景,当 RANDOM() 参数输入为变量时,每次都会重新计算 seed

SELECT * FROM t1;
+------+
| c1 |
+------+
| 3 |
| 4 |
| 5 |
| 1 |
| 1 |
+------+
5 rows in set

SELECT t1.c1, RAND(t1.c1), RANDOM(t1.c1) FROM TABLE(GENERATOR(1)), t1;
+------+---------------------+----------------------+
| c1 | RAND(t1.c1) | RANDOM(t1.c1) |
+------+---------------------+----------------------+
| 3 | 0.9057697559760601 | 1084041170817055659 |
| 4 | 0.15595286540310166 | 5267436225003336391 |
| 5 | 0.40613597483014313 | 3192483991702052534 |
| 1 | 0.40540353712197724 | -6753783847308464280 |
| 1 | 0.40540353712197724 | -6753783847308464280 |
+------+---------------------+----------------------+
5 rows in set (0.001 sec)