`
akunamotata
  • 浏览: 378868 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle随机取记录的问题

    博客分类:
  • DB
阅读更多

在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里抽取随机数的多种方法

    在 Oracle 中抽取随机数是许多应用场景中常见的问题,例如在某个活动中需要随机取出一些符合条件的用户,以颁发获奖通知或其它消息。本文将通过实例讲解如何抽取随机数的多种方法。 首先,我们可以使用 Oracle 自带...

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

    5. 将临时表 tmp_1 和 tmp_2 相关联,取得符合条件的随机记录。 6. 最后,删除临时表 tmp_1、tmp_2 和序列号 tmp_id。 例如,以下是使用 DBMS_RANDOM 包生成随机数的示例代码: ```sql -- 创建序列号 tmp_id CREATE...

    SQL随机提取N条记录

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

    Oracle数据库操作

    3. **子程序_随机取汉字**: 如果应用程序需要生成随机的汉字字符串,可以使用Oracle的内置函数或者自定义过程来实现。一种可能的方法是利用DBMS_RANDOM包中的STRING函数结合字符集范围来随机选择汉字。同时,需要...

    Oracle应用常见傻瓜问题 1000问

    Oracle版本的位数主要取决于安装时选择的操作系统版本。一般来说,64位版本可以在64位操作系统上安装,而32位版本则只能安装在32位操作系统上。可以通过查看`$ORACLE_HOME/network/admin/listener.ora`文件或者在SQL...

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

    Oracle查询结果集,随机排序 代码如下:select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT ...

    oracle ebs开发文档

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

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

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

    Oracle EBS 开发笔记

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

    oracle例程高级应用窗口

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

    ORACLEEBS_FORM

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

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

    此外,它也适用于某些特定场景,比如在抽奖系统中,根据预先生成的随机数,通过`ROWNUM`快速定位到特定的奖品记录,从而实现随机选取。在高并发环境下,配合乐观锁(如版本号字段)可以防止并发冲突,保证数据一致性...

    OracleEBS_EBS开发

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

    Oracle 中生成流水号的方法

    最后,函数返回最终生成的流水号,这个流水号是前缀和流水号的组合,或者只有流水号,取决于前缀是否为空。 此外,为了方便调用,还可以创建一个存储过程`Hp_Pro_GetTestNo`,它接收一个前缀`v_FirstLetter`,并...

    Oracle-ERP(NEW)笔记

    - **去重记录**:掌握取不重复记录的方法,保持数据的唯一性。 - **表数量统计**:统计EBS表的数量,了解系统规模。 - **锁的概念**:Oracle锁的基本概念及其实现机制。 - **死锁处理**:解决Oracle死锁问题的策略与...

    oracle chm帮助文件下载

    25. **分组取前N条记录**:`RANK()`, `DENSE_RANK()`, 或 `ROW_NUMBER()` 分组窗口函数可以配合`ORDER BY`和`LIMIT`或`FETCH FIRST`获取每个组的前N条记录。 26. **合并相邻记录**:通过自连接和`LAG()`或`LEAD()`...

    oracle技巧总结

    在决策支持系统(DSS)中,由于其较低的并发访问量,位图索引的资源消耗问题可能不如在线事务处理(OLTP)系统那么显著。 通过创建两个表`test_normal`和`test_random`,并分别插入100万条记录,我们展示了数据的...

Global site tag (gtag.js) - Google Analytics