在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范围的随机数
select * from mytable sample(百分比) 也可以
分享到:
相关推荐
在 Oracle 中抽取随机数是许多应用场景中常见的问题,例如在某个活动中需要随机取出一些符合条件的用户,以颁发获奖通知或其它消息。本文将通过实例讲解如何抽取随机数的多种方法。 首先,我们可以使用 Oracle 自带...
5. 将临时表 tmp_1 和 tmp_2 相关联,取得符合条件的随机记录。 6. 最后,删除临时表 tmp_1、tmp_2 和序列号 tmp_id。 例如,以下是使用 DBMS_RANDOM 包生成随机数的示例代码: ```sql -- 创建序列号 tmp_id CREATE...
这里我们将深入探讨如何在SQL中实现这一功能,以满足“SQL随机抽取N条记录”的需求。 首先,我们需要理解SQL的基本查询结构。SQL查询通常包括SELECT语句,用于指定要从数据库中检索哪些列;FROM语句,指定数据源;...
3. **子程序_随机取汉字**: 如果应用程序需要生成随机的汉字字符串,可以使用Oracle的内置函数或者自定义过程来实现。一种可能的方法是利用DBMS_RANDOM包中的STRING函数结合字符集范围来随机选择汉字。同时,需要...
Oracle查询结果集,随机排序 代码如下:select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT ...
- **随机取前10条不同的记录**:通过组合使用 ROWNUM 和 SELECT DISTINCT 来实现。 - **TRUNC函数**:用于去除小数部分。 - **修改表的一些常用语法**:如 ADD、MODIFY 和 DROP 等,用于表结构的修改。 - **舍入函数...
从数据库中随机取记录的基本思路是通过添加一个随机排序字段来打乱记录的顺序,然后通过限制查询结果的数量来获取指定数量的记录。 #### 2. SQL通用方法 在大多数关系型数据库中,可以通过以下SQL语句实现: ```...
再来说说"子程序_随机取汉字"。在处理中文字符时,这个子程序可能是为了生成随机的汉字字符串,这在测试、数据填充或生成模拟数据时非常有用。它可能利用了Oracle的内置函数或者创建了一个自定义的函数,通过选择...
此外,它也适用于某些特定场景,比如在抽奖系统中,根据预先生成的随机数,通过`ROWNUM`快速定位到特定的奖品记录,从而实现随机选取。在高并发环境下,配合乐观锁(如版本号字段)可以防止并发冲突,保证数据一致性...
- **随机取前10条不同的记录**:随机抽取数据样本。 - **TRUNC函数**:截断日期或数值。 - **修改表的一些常用语法**:SQL语句用于表结构的修改。 - **舍入函数**:对数值进行四舍五入操作。 - **实现类似BREAK...
- **随机取前10条不同的记录**:介绍了一种获取随机样本的方法。 - **修改表的一些常用语法**:包括添加、删除字段等操作。 - **舍入函数**:如`round`等函数用于数值处理。 - **实现类似 BREAK 语句**:虽然SQL...
- **随机取前10条不同的记录**:获取随机样本数据。 - **TRUNC函数**:截断数字或日期。 - **修改表的一些常用语法**:包括ALTER TABLE等命令。 - **舍入函数**:处理数值的四舍五入。 - **实现类似BREAK语句**:...
Oracle版本的位数主要取决于安装时选择的操作系统版本。一般来说,64位版本可以在64位操作系统上安装,而32位版本则只能安装在32位操作系统上。可以通过查看`$ORACLE_HOME/network/admin/listener.ora`文件或者在SQL...
- **去重记录**:掌握取不重复记录的方法,保持数据的唯一性。 - **表数量统计**:统计EBS表的数量,了解系统规模。 - **锁的概念**:Oracle锁的基本概念及其实现机制。 - **死锁处理**:解决Oracle死锁问题的策略与...
最后,函数返回最终生成的流水号,这个流水号是前缀和流水号的组合,或者只有流水号,取决于前缀是否为空。 此外,为了方便调用,还可以创建一个存储过程`Hp_Pro_GetTestNo`,它接收一个前缀`v_FirstLetter`,并...
本篇文章将详细介绍在四种主流的数据库系统——SQL Server、Oracle、MySQL和Access中,如何有效地获取10条随机数据。 1. **SQL Server** 在SQL Server中,我们可以利用`TOP`子句来限制返回的行数,并结合`NEWID()`...
25. **分组取前N条记录**:`RANK()`, `DENSE_RANK()`, 或 `ROW_NUMBER()` 分组窗口函数可以配合`ORDER BY`和`LIMIT`或`FETCH FIRST`获取每个组的前N条记录。 26. **合并相邻记录**:通过自连接和`LAG()`或`LEAD()`...