怎么从一个表中随机取一条数据

怎么从一个表中随机取一条数据,第1张

oracle随机读取表中的N条数据方法:

1) select * from (select * from tablename order by sys_guid()) where rownum < N 

2) select * from (select * from tablename order by dbms_random.value) where rownum< N 

3) select *  from (select * from table_name sample(10)   order by trunc(dbms_random.value(0, 1000)))  where rownum < N

说明: 

sample(10)含义为检索表中的10%数据,sample值应该在[0.000001,99.999999]之间,其中 sys_guid() 和 dbms_random.value都是内部函数

注:

在使1)方法时,即使用sys_guid() 这种方法时,有时会获取到相同的记录,即:和前一次查询的结果集是一样的(可能是和 *** 作系统有关:windows正常,linux异常;也可能是因为sys_guid()函数本身的问题,有待继续研究)

所以,为确保在不同的平台每次读取的数据都是随机的,建议采用2)和3)两种方案,其中2)方案更常用。3)方案缩小了查询的范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有一定的提高

随机读取可用newid(),取一条可用top 1

举例:如在表test中随机抽取一条未被读取的数据,执行语句为:

select top 1 * from test order by newid()

第一次执行结果:

第二次执行结果:

结论:两次执行结果有可能一样,也有可能不一样,也就是实现了随机的效果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10649305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存