好记性不如铅笔头

SQL, 编程

SQL使用RAND函数进行随机抽样

假设数据库中一共有7142条数据,我们需要随机抽样出100条数据。

CONTENTS

方法一

select * from XX_DB order by rand() limit 100

解释:rand()函数会产生0-1之间的随机数,order by rand()根据产生的随机数进行排序。limit 100截取前100行数据。从而达到随机抽样100条数据的目的。
需要注意的是,虽然这是最简单的方法,并且在数据较小的表执行速度较快,但是当数据较大的时候,查询速度就会较慢。

方法二

我们先计算我们需要抽样数据与总体的占比100/7142=0.014,然后通过查询语句随机抽样出上述比例的数据:

select * from XX_DB where rand()<0.014

解释:对于每一行数据,都会执行判断条件where rand()<0.014,而rand()是产生0-1的随机函数,那么每条数据都有0.014的机率被筛选出来,最终会筛选出总体×0.014条数据。当然实际筛选出的数据条数不是固定的,它随着数据量越大越接近0.014这个比例。我们为了抽取出刚好100条数据,我们可以稍微提高抽取的比例,然后使用limit 100截取前100条数据:

select * from XX_DB where rand()<0.015 limit 100

发表评论

6 + 5 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据