跳到主要内容

UNIFORM

声明

UNIFORM(<min> , <max> , <gen>)

说明

该函数返回一个符合均匀分布(Uniform Distribution)的整数或浮点数。

  • min, max 的取值必须是标量值,不随行迭代而变。例如,常量、标量函数等。PL 里还可以是 @v11+@v3 等。
  • MySQL 模式下,当 minmax 均为整数时,UNIFORM() 函数的输出结果为整数;否则,UNIFORM() 函数的输出结果为浮点数。
  • gen 是一个数值生成函数,通常使用 RANDOM() 函数生成。如果传入值是一个常量,则 UNIFORM() 函数返回值也为一个定值。

示例

如下示例为均匀生成 1~10 之间的整数。

SELECT v, COUNT(*) FROM (SELECT UNIFORM(1, 10, RANDOM()) v FROM TABLE(GENERATOR(1000000))) x GROUP BY v ORDER BY v;
+------+----------+
| v | count(*) |
+------+----------+
| 1 | 100738 |
| 2 | 100119 |
| 3 | 100223 |
| 4 | 99537 |
| 5 | 100125 |
| 6 | 100001 |
| 7 | 100275 |
| 8 | 99235 |
| 9 | 99837 |
| 10 | 99910 |
+------+----------+
10 rows in set (0.002 sec)

如下示例说明返回的结果类型和参数的类型有关。

SELECT UNIFORM(0.0, 10, RANDOM()) FROM TABLE(GENERATOR(4)) ORDER BY 1;
+----------------------------+
| UNIFORM(0.0, 10, RANDOM()) |
+----------------------------+
| 2.3520877625884653 |
| 4.155845987385725 |
| 8.323930497420852 |
| 9.844002748532109 |
+----------------------------+
4 rows in set (0.001 sec)

SELECT UNIFORM(0, 10, RANDOM()) FROM TABLE(GENERATOR(4)) ORDER BY 1;
+--------------------------+
| UNIFORM(0, 10, RANDOM()) |
+--------------------------+
| 0 |
| 4 |
| 8 |
| 9 |
+--------------------------+
4 rows in set (0.001 sec)