Chinaunix首页 | 论坛 | 博客
  • 博客访问: 196101
  • 博文数量: 37
  • 博客积分: 1390
  • 博客等级: 中尉
  • 技术积分: 336
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-16 13:18
文章分类

全部博文(37)

文章存档

2011年(1)

2008年(36)

我的朋友

分类: Oracle

2008-09-11 10:25:33

在itpub上提出了问题,没人理。自己解决吧。是个笨方法,想不出好的了。

问题:

select * from
  (select * from t order by dbms_random.value)
where rownum = 1;

随机取表中的 1 条数据;

现在想实现取出的数据不是按平均的概率出现,而是按指定的概率。比如表中的数据是 a、b、 c、 d、 e 5条记录,指定出现的概率为5、4、3、2、1;也就是说,随机取出一条记录,取出a的可能性有5/15,取出e的可能性为1/15。

解决:

建一个15条记录的表t1,记录是5个a,4个b,3个c,2个d,1个e;

然后查询就是了:

select * from
  (select * from t1 order by dbms_random.value)
where rownum = 1;

虽然笨点,目的达到了。

 

另附随机抽取前N条记录的常用方法
8i以上版本
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;
注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)可以产生100到200范围的随机数

阅读(1228) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Python 随机数与随机字符串

给主人留下些什么吧!~~