27-巧用RAND()提取随机行
大多数数据库都会提供产生随机数的包或者函数,通过这些包或者函数可以产生用户需要的随机数,也可以用来从数据表中抽取随机产生的记录,这对一些抽样分析统计是非常有用的。例如ORACLE中用DBMS_RANDOM包产生随机数,而在MySQL中,产生随机数的方法是RAND()函数。可以利用这个函数与ORDER BY子句一起完成随机抽取某些行的功能。它的原理其实就是ORDER BY RAND()能够把数据随机排序。
例如,可按照随机顺序检索数据行:
mysql> select * from category order by rand();
+-------------+-------------+---------------------+
| category_id | name | last_update |
+-------------+-------------+---------------------+
| 12 | Music | 2006-02-15 04:46:27 |
| 9 | Foreign | 2006-02-15 04:46:27 |
| 13 | New | 2006-02-15 04:46:27 |
| 7 | Drama | 2006-02-15 04:46:27 |
| 1 | Action | 2006-02-15 04:46:27 |
| 3 | Children | 2006-02-15 04:46:27 |
…
这样,如果想随机抽取一部分样本的时候,把数据随机排序后再抽取前n条记录就可以了,比如:
mysql> select * from category order by rand() limit 5;
+-------------+-----------+---------------------+
| category_id | name | last_update |
+-------------+-----------+---------------------+
| 4 | Classics | 2006-02-15 04:46:27 |
| 9 | Foreign | 2006-02-15 04:46:27 |
| 2 | Animation | 2006-02-15 04:46:27 |
| 16 | Travel | 2006-02-15 04:46:27 |
| 7 | Drama | 2006-02-15 04:46:27 |
+-------------+-----------+---------------------+
5 rows in set (0.00 sec)
上面的例子从类别表category中随机抽取了5个样本,随机抽取样本对总体的统计具有十分重要的意义,因此这个函数非常有用。