mysql随机获取数据RAND()函数

有这样一个场景,需要从200个商品中随机获取5个进行展示,mysql有一个RAND()函数可以满足需要,简单记录 MySQL函数在内部被标记为确定性或不确定性。一个函数是不确定的,如果给定其参数的固定值,它可以为不同的调用返回不同的结果。非确定性函数的例子:RAND(), UUID()。这里主要描述RAND()的使用方法。

RAND()

返回一个随机浮点值v,范围为0 <= v < 1.0。为了得到一个在i <= R < j范围内的随机整数R,使用表达式FLOOR(i + RAND() * (j−i))。例如,要获得一个5 <= R < 10范围内的随机整数.可以使用如下语句:

SELECT FLOOR(5 + (RAND() * 5));
mysql> SELECT FLOOR(5 + (RAND() * 5));
+-------------------------+
| FLOOR(5 + (RAND() * 5)) |
+-------------------------+
|                       9 |
+-------------------------+
1 row in set (0.00 sec)

在ORDER BY或GROUP BY子句中使用带有RAND()值的列可能会产生意想不到的结果,因为对于这两个子句,RAND()表达式都可以对同一行计算多次,每次返回不同的结果。如果目标是检索随机顺序的行 SELECT * FROM tbl_name ORDER BY RAND();

要从一组行中随机选择一个样本,将ORDER BY RAND()和LIMIT组合: SELECT * FROM table1, table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000;

RAND(N) N为常量数值 RAND(N)每次返回相同的值,从而产生可重复的列值序列 RAND()不是常量值,不能用于索引优化

经验分享 程序员 微信小程序 职场和发展