`

一个oracle随机取记录的问题

阅读更多
来源:http://wxy0327.itpub.net/post/16888/86828

在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范围的随机数
分享到:
评论

相关推荐

    Oracle里抽取随机数的多种方法

    然后,我们创建一个临时表 tmp_1,把符合本次活动条件的记录全部取出来: create table tmp_1 as select tmp_id.nextval as id,email,mobileno from 表名 where 条件; 找到最大的 id 号: select max(id) from ...

    Oracle里取随机数的几种具体的方法

    2. 创建一个临时表 tmp_1,将符合条件的记录全部取出来。 3. 设定一个随机数种子,可以使用固定值或当前系统时间。 4. 调用 DBMS_RANDOM.VALUE 函数生成随机数,并将其存储在临时表 tmp_2 中。 5. 将临时表 tmp_1 和...

    SQL随机提取N条记录

    随机抽取大量数据时,使用RAND()函数可能会导致性能问题,因为它会为表中的每行计算一个随机值。为优化性能,可以尝试在WHERE子句中添加条件,减少需要排序的行数。 7. **分页和随机性**: 如果你需要从特定位置...

    Oracle数据库操作

    在PL/SQL中,可以声明一个游标,执行SQL查询,并通过循环遍历游标来显示记录集中的每一条信息。 2. **子程序_转换到SQL时间**: 数据库中的时间数据通常以特定的格式存储,例如TIMESTAMP或DATE类型。在处理这些...

    Oracle应用常见傻瓜问题 1000问

    裸设备是指操作系统分配给Oracle的一个物理设备,它没有文件系统的格式化,由Oracle直接控制和管理。这种方式可以提高性能,尤其是在早期的Oracle版本中。 #### 7. Oracle如何区分64-bit/32bit版本? Oracle版本的...

    数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT 1 来查询 SELECT * FROM table1 WHERE id=(SELECT id FROM table1 ORDER BY rand() LIMIT 1)...

    oracle ebs开发文档

    - **随机取前10条不同的记录**:通过组合使用 ROWNUM 和 SELECT DISTINCT 来实现。 - **TRUNC函数**:用于去除小数部分。 - **修改表的一些常用语法**:如 ADD、MODIFY 和 DROP 等,用于表结构的修改。 - **舍入函数...

    随机获取oracle数据库中的任意一行数据(rownum)示例介绍

    Oracle数据库中的`ROWNUM`是一个非常实用的特性,它为查询结果集的每一行赋予一个唯一的数字标识,从1开始递增。这个标识符在查询过程中动态生成,并且与表中的实际行没有直接关联,因此它不是一个真正的列,不能与...

    oracle例程高级应用窗口

    再来说说"子程序_随机取汉字"。在处理中文字符时,这个子程序可能是为了生成随机的汉字字符串,这在测试、数据填充或生成模拟数据时非常有用。它可能利用了Oracle的内置函数或者创建了一个自定义的函数,通过选择...

    如何从数据库中随机取出10条记录的方法

    从数据库中随机取记录的基本思路是通过添加一个随机排序字段来打乱记录的顺序,然后通过限制查询结果的数量来获取指定数量的记录。 #### 2. SQL通用方法 在大多数关系型数据库中,可以通过以下SQL语句实现: ```...

    ORACLEEBS_FORM

    - **随机取前10条不同的记录**:介绍了一种获取随机样本的方法。 - **修改表的一些常用语法**:包括添加、删除字段等操作。 - **舍入函数**:如`round`等函数用于数值处理。 - **实现类似 BREAK 语句**:虽然SQL...

    Oracle EBS 开发笔记

    - **随机取前10条不同的记录**:随机抽取数据样本。 - **TRUNC函数**:截断日期或数值。 - **修改表的一些常用语法**:SQL语句用于表结构的修改。 - **舍入函数**:对数值进行四舍五入操作。 - **实现类似BREAK...

    OracleEBS_EBS开发

    - **随机取前10条不同的记录**:获取随机样本数据。 - **TRUNC函数**:截断数字或日期。 - **修改表的一些常用语法**:包括ALTER TABLE等命令。 - **舍入函数**:处理数值的四舍五入。 - **实现类似BREAK语句**:...

    Oracle 中生成流水号的方法

    如果没有记录,表示这是第一次生成流水号,那么生成一个由`P_LENGTH`个零组成的流水号(如'0001'),并将这个流水号与前缀连接,插入到`HP_NO`表中。 2. 如果存在匹配的记录,说明之前已经生成过流水号,此时需要...

    Oracle-ERP(NEW)笔记

    - **键盘导航优化**:通过代码实现按“ENTER”键自动跳转到下一个字段,提升用户体验。 - **堆叠画布使用**:了解堆叠画布的布局原理及其在复杂界面设计中的应用。 - **事务触发机制**:深入研究Forms中事务触发的...

    oracle技巧总结

    位图索引将每个值用一个或多个位来表示,节省存储空间。尽管传统观点认为位图索引适用于性别、婚姻状态等分类列,但实际情况并非如此严格。位图索引在非频繁更新的并发系统中同样表现良好,甚至对于完全唯一的列(如...

    四种数据库随机获取10条数据的方法

    `NEWID()`函数生成的是一个全局唯一标识符(GUID),每次调用都会返回一个新的值,因此通过排序可以得到随机的10条记录。 2. **Oracle** Oracle数据库提供了`DBMS_RANDOM`包,其中的`RANDOM`函数可以生成0到1之间...

Global site tag (gtag.js) - Google Analytics