oracle如何随机组行,oracle 随机
在oracle中,如何从一张表中查询一条随机记录
这几天工作上的需要,要从一个比较大的表中随机取出一条记录,oracle 不像MS SQLSERVER那样,直接用Select TOP 1 * From TABLE Order By NewID(),就能高效的随机查出一条记录。经过一翻折腾,用一个有90万条记录的表t_id,只有一个gameid字段,该字段上没有索引,表里就是从100000到999999一连串的数据记录,进行测试:
创新互联不只是一家网站建设的网络公司;我们对营销、技术、服务都有自己独特见解,公司采取“创意+综合+营销”一体化的方式为您提供更专业的服务!我们经历的每一步也许不一定是最完美的,但每一步都有值得深思的意义。我们珍视每一份信任,关注我们的网站建设、成都做网站质量和服务品质,在得到用户满意的同时,也能得到同行业的专业认可,能够为行业创新发展助力。未来将继续专注于技术创新,服务升级,满足企业一站式网络营销推广需求,让再小的品牌网站制作也能产生价值!
方法1.
采用rownum和dbms_random.value,平均用时5秒,这个效率确实是太低了,对于小表应该还行,大表那就太不适合了。
declare
n_id number(6);
begin
SELECT gameid into n_id FROM(SELECT gameid FROM t_id T ORDER BY dbms_random.value()) WHERE ROWNUM=1;
dbms_output.put_line(to_char(n_id));
end;
/
方法2.
采用oracle sample语法,设置随机样本是1%,结果用时0.01左右,速度是相当快的,但是根据官网的说法,采用sample采集特性可能会产生不准确的结果集,我在测试中是没有碰到不正确的结果。但是有个问题,就是随机的结果分布很不平均,结果几乎都分内存卡在100000-200000的记录中。效率虽好,但并没有达到很好的随机效果,如果对于结果的要求不是很高的,这个方法是相当不错的。
declare
n_id number(6);
begin
SELECT gameid into n_id FROM t_id SAMPLE (1) WHERE ROWNUM = 1;
dbms_output.put_line(to_char(n_id));
end;
/
方法3.
采用minus语法,先随机获取一个在表总记录数范围内的一个随机数,再通过rownum查询两个结果集只相差一条记录,用minus相减留出事先随机数的那条记录,平均用时大概1秒,随机数越小,查询速度越快,当随机数是20000时,用于0.016秒。该方法虽然
能得到很有随机效果,但效率比较不上该方法2. 对效率要求一般的话, 还是可以考虑使用的。
declare
n_count int:=0;
n_rand_num int:=0;
n_id number(6);
begin
SELECT COUNT(*) INTO n_count FROM t_id;
SELECT trunc(dbms_random.value(1,n_count+1)) INTO n_rand_num FROM DUAL;
select gameid into n_id from (SELECT gameid FROM t_id T WHERE rownumn_rand_num
minus
SELECT gameid FROM t_id T WHERE rownumn_rand_num-1);
dbms_output.put_line(to_char(n_id));
end;
/
求教ORACLE大牛,怎么从分组中每组随机取出特定数目的记录
可以直接使用 Oracle 的 ROWNUM 伪列来处理。
或者 使用 ROW_NUMBER() OVER ( ORDER BY class ) 的分析函数来处理。
参考资料中,是关于 排名或顺序的函数 ROW_NUMBER/RANK/DENSE_RANK/NTILE 使用的例子。 SQL Server 与 Oracle 都可以用的。
Oracle 按行数分组怎么处理
不用下跪,我来挽救你。
select trunc((rownum - 1)/10)+1 as groups,max(field1),min(field1),avg(field1) from y61 group by trunc((rownum - 1)/10)+1 order by groups;
oracle中随机抽取几组数据
方法有很多种,这里提供一例供参考:
select * from (select * from scott.emp order by dbms_random.random) where rownum11;
如何随机抽取oracle表中的记录
1楼瞎扯,你那个不是随机100行,每次运行的结果都是一样的;而且你用rank也不对,假如出现并列第100名,你那个返回的就不是100行了,应该用row_number
真正要随机应该这样写:
select * from
(select sale_id,user_id,row_number() over (partition by sale_id order by rnv) rn
from
(select sale_id,user_id,dbms_random.value() rnv from table1
where fee=5000 and sms_fee0 and gprs_cmwap_fee0 and statis_month=201003)
)
where rn=100
order by sale_id,user_id;
oracle中根据条件取随机N行
SELECT * FROM (
SELECT A,B,ROW_NUMBER() OVER(partition by A order by A desc) as RN
FROM TABLE
ORDER BY A,B
) WHERE RN5
本文标题:oracle如何随机组行,oracle 随机
文章路径:http://pwwzsj.com/article/dssdhgh.html