[Q]随机抽取前N条记录的问题
[A]8i以上版本
select * from (select * from tablename order by sys_guid()) where rownum < N;
select * from (select * from tablename order by dbms_random.value) where rownum< N;
注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)可以产生100到200范围的随机数
[A]8i以上版本
select * from (select * from tablename order by sys_guid()) where rownum < N;
select * from (select * from tablename order by dbms_random.value) where rownum< N;
注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)可以产生100到200范围的随机数
解决方案 »
- 数据块损坏”预警日志错误: 时间/行号 Wed May 12 17:54:53 2010/1573873
- 导入数据库出现问题,提示最大值10,实际值12,可能是编码方式问题?
- oracle10g存储过程和函数的创建格式
- PL/SQL写个PROCEDURE,比较难!!!!!!!!!!!!!!
- 怎样查看当前用户执行SQL语句
- 一个关于ORACLE用户的问题?
- PL/SQL问题 DBMS_UTILITY.get_time 可以获得当前时间,但上一天的时间怎么取?
- 在DOS窗口EXP中文显示乱码?
- 真的是windows内部错误吗?
- 关于从ORA中导入数据问题(24小时在线!~)
- SQL和ORCALE都有哪些字段类型,它们不同处在哪? 谢谢!
- 请教关于sqlltr命令中的load data问题
select substr(aa,1,10),count(*) from table
group by substr(aa,1,10)if count(*)<=10 从table中选取出aa来
if count(*)>10 从table中随机选取10条aa来
select * from (select * from t1 order by sys_guid()) where rownum < 10;
select substr(aa,1,10),count(*) from table
group by substr(aa,1,10)
如果 count(*)<=10
则是从table里面把这些记录取出来
如果 count(*)>10
则是从table里面取substr(aa,1,10)=该分组的随机10条记录明白了吗??
aa 如下:
1111111111a
1111111111b
1111111111c
1111111111d
1111111111e
1111111111f
1111111111g
1111111111h
1111111111i
1111111111j
1111111111k
substr(aa,1,10)=1111111111 有12条记录
现在我要从这12条记录里面随机取10条记录, 当然还有其他的分组 条数>10条的
只分组就可以了
其他的加条件 select * from ( select count(*) c,substr(a,1,1) d from a11 group by substr(a,1,1) ) t2 where t2.c >4; 但是我用我自己的表试验了一下 也没有成功 !!
自己努力吧你
这样就OK 了
select substr(aa,1,10),count(*) from table
group by substr(aa,1,10)if count(*)<=10 从table中选取出aa来
if count(*)>10 从table中随机选取10条aa来
========================
if count(*)<=10 从table中选取出aa来:用having就可以
select substr(aa,1,10),count(*) from table
group by substr(aa,1,10)if count(*)<=10 从table中选取出aa来
if count(*)>10 从table中随机选取10条aa来
========================
if count(*)<=10 从table中选取出aa来:用having就可以
select substr(aa,1,10),count(*) from table
group by substr(aa,1,10) having count(*) <=10if count(*)>10 从table中随机选取10条aa来:
select * from
(select substr(aa,1,10),count(*) from table
group by substr(aa,1,10) having count(*) >10
order by dbms_random.value)
where rownum<11要想把这两个结果用一个sql跑出来,只需要用union就可以了。
http://www.cnoug.org/viewthread.php?tid=20848