RAND
声明
RAND([N])
说明
RAND([N]) 函数接受 0 个或者 1 个参数(N 被称为随机数种子),返回一个范围是 [0,1.0) 的随机浮点数。如果想获得一个范围在 [i, j) 的随机整数,可以使用表达式 FLOOR(I + RAND() * (j - i))。
如果参数 N 不指定,那么在执行之前会使用随机种子初始化,之后 RAND() 会根据这个初始化值来生成随机数,所以 RAND() 每次会生成不同的随机数序列。
如果参数 N 指定,那么 N 会作为随机数种子来生成随机数。根据 N 是否是常量,分成以下两种情况:
-
如果
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。
示例
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 (0.001 sec)