龙空技术网

ORACLE 随机获取表中数据的方法

年轻的腊肉 21

前言:

现在兄弟们对“oracle 取随机记录”可能比较看重,各位老铁们都想要分析一些“oracle 取随机记录”的相关资讯。那么小编在网上汇集了一些有关“oracle 取随机记录””的相关知识,希望你们能喜欢,你们一起来了解一下吧!

在实际工作中我们会遇到随机获取表中部分数据进行分析的案例(类似于随机取样)。本文针对此情况列举两个方法,做一下简单为介绍。下文以随机获取100条数据为例

1、rownum+dbms_random.random

一般我们随机获取数据,可以用rownum大于某个值来获取数据,脚本如下:

select * from <table> where rownum < 101

其实这种获取数据的方法并没有真正意义上实现“随机”,每次我们获取的数据是一样的。

真正随机获取数据,需要用到一个函数:dbms_random.random,dbms_random.random为获取任意大小的数据,我们每次查询都根据该值排序,即实现了“随机”的结果,正常查询脚本如下:

select * from (select * from <table> order by dbms_random.random) where rownum < 101

2、sample

sample的英文含义就有“样本”的意思。该统计是基于统计学统计返回数据,也是基于一个概率问题,因此返回数据量不一致,对此做以下说明:

A、 sample 是随机采样函数,参数是百分比,取值范围(0.00001,99.99999)

B、sample局限性较多:只对单表生效;不能用于表连接和远程表;短时间(几秒)内采样几乎相同;先采样再执行where子句

C、 sample会使sql自动使用CBO(cost-based SQL optimizer)

实例查询脚本如下:

返回1%的数据:select * from dfk_tj_all sample(1)

返回50%的数据:select * from dfk_tj_all sample(50)

标签: #oracle 取随机记录 #oraclesample1 #oracle 随机查询