目前负责的这个数字化项目,需要开发个质检工具,实现每次随机取20%的数据进行质检,开发人员问我如何实现随机取20%的数据。
使用ORACLE的sample可以很容易实现,但是ORACLE返回的结果不是很准确。
SQL> select count(*) from t001;
COUNT(*)
----------
500
执行计划
----------------------------------------------------------
Plan hash value: 3039494805
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 500 | 21500 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T001 | 500 | 21500 | 4 (0)| 00:00:01 |
--------------------------------------------------------------------------
此时全表扫描,ORACLE扫描了所有的数据块,下面是使用SAMPLE的情况。
SQL> select count(*) from t001 sample(20);
COUNT(*)
----------
107
执行计划
----------------------------------------------------------
Plan hash value: 1696761856
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 100 | 5500 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS SAMPLE| T001 | 100 | 5500 | 4 (0)| 00:00:01 |
---------------------------------------------------------------------------
但是SAMPLE返回的结果并不是十分的准确,通过执行计划可以看出,ORACLE试图返回正确的20%在这里也就是100行记录。
SQL> select count(*) from t001 sample(20);
COUNT(*)
----------
97
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 100 | 5500 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS SAMPLE| T001 | 100 | 5500 | 4 (0)| 00:00:01 |
---------------------------------------------------------------------------
可以通过以下方式查询是否取的是随机数据。
SQL> select efile from t001 sample(20) where rownum<6;
EFILE
-------------------------------------------------------
D:\03\03--0017\04-01-03-0017-003-0004.jpg;
D:\03\03--0046\04-01-03-0046-002-0004.jpg;
D:\03\03--0056\04-01-03-0056-002-0001.jpg;
D:\05\05--0023\04-01-05-0023-011-0002.jpg;
D:\03\03--0120\04-01-03-0120-006-0001.jpg;
SQL> select efile from t001 sample(20) where rownum<6;
EFILE
-------------------------------------------------------
D:\02\02--0149\04-01-02-0149-003-0008.jpg;
D:\03\03--0017\04-01-03-0017-003-0001.jpg;
D:\03\03--0017\04-01-03-0017-003-0002.jpg;
D:\03\03--0017\04-01-03-0017-003-0004.jpg;
D:\03\03--0017\04-01-03-0017-003-0008.jpg;
分享到:
相关推荐
在 Oracle 中抽取随机数是许多应用场景中常见的问题,例如在某个活动中需要随机取出一些符合条件的用户,以颁发获奖通知或其它消息。本文将通过实例讲解如何抽取随机数的多种方法。 首先,我们可以使用 Oracle 自带...
在Oracle数据库环境中,生成随机数是一项常见且实用的操作,它被广泛应用于数据模拟、测试、安全性和数据分析等领域。本文将深入探讨如何在Oracle中生成不同类型的随机数,包括字符型、数值型以及GUID,旨在为数据库...
在Oracle数据库中,生成随机数是一项常见的需求,特别是在数据测试、模拟或数据分析场景中。本文将详细介绍如何在Oracle SQL中获取各种类型的随机数。 首先,Oracle提供了一个内置的函数DBMS_RANDOM,它包含了一...
3. **子程序_随机取汉字**: 如果应用程序需要生成随机的汉字字符串,可以使用Oracle的内置函数或者自定义过程来实现。一种可能的方法是利用DBMS_RANDOM包中的STRING函数结合字符集范围来随机选择汉字。同时,需要...
此外,它也适用于某些特定场景,比如在抽奖系统中,根据预先生成的随机数,通过`ROWNUM`快速定位到特定的奖品记录,从而实现随机选取。在高并发环境下,配合乐观锁(如版本号字段)可以防止并发冲突,保证数据一致性...
在SQL(Structured Query Language)中,随机提取数据是一项常见的需求,尤其在数据分析、测试或样例展示时。这里我们将深入探讨如何在SQL中实现这一功能,以满足“SQL随机抽取N条记录”的需求。 首先,我们需要...
- **随机取前10条不同的记录**:通过组合使用 ROWNUM 和 SELECT DISTINCT 来实现。 - **TRUNC函数**:用于去除小数部分。 - **修改表的一些常用语法**:如 ADD、MODIFY 和 DROP 等,用于表结构的修改。 - **舍入函数...
其中,将汉字转换为其拼音简码(即取每个汉字拼音的首字母)是常见的需求之一,尤其是在数据检索、排序或创建基于拼音的索引时。本文将详细介绍Oracle数据库中实现这一功能的方法,包括函数的结构、工作原理以及实际...
Oracle查询结果集,随机排序 代码如下:select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT ...
Oracle数据库在企业级应用中扮演着至关重要的角色,而其性能和稳定性往往取决于运行它的操作系统。对于基于Linux的Oracle系统,调整和优化Linux环境可以显著提升Oracle的可用性和可靠性。本文将针对Red Hat ...
本篇文章将详细介绍在四种主流的数据库系统——SQL Server、Oracle、MySQL和Access中,如何有效地获取10条随机数据。 1. **SQL Server** 在SQL Server中,我们可以利用`TOP`子句来限制返回的行数,并结合`NEWID()`...
- **随机取前10条不同的记录**:随机抽取数据样本。 - **TRUNC函数**:截断日期或数值。 - **修改表的一些常用语法**:SQL语句用于表结构的修改。 - **舍入函数**:对数值进行四舍五入操作。 - **实现类似BREAK...
再来说说"子程序_随机取汉字"。在处理中文字符时,这个子程序可能是为了生成随机的汉字字符串,这在测试、数据填充或生成模拟数据时非常有用。它可能利用了Oracle的内置函数或者创建了一个自定义的函数,通过选择...
- **随机取前10条不同的记录**:介绍了一种获取随机样本的方法。 - **修改表的一些常用语法**:包括添加、删除字段等操作。 - **舍入函数**:如`round`等函数用于数值处理。 - **实现类似 BREAK 语句**:虽然SQL...
- **随机取样**:学习如何随机选取数据库中的记录,适用于大数据分析场景。 - **TRUNC函数应用**:掌握日期截断与数值截断的使用场景。 - **表修改语法**:熟悉修改表结构的常用SQL语法,便于数据模型的调整。 - **...
- **随机取前10条不同的记录**:获取随机样本数据。 - **TRUNC函数**:截断数字或日期。 - **修改表的一些常用语法**:包括ALTER TABLE等命令。 - **舍入函数**:处理数值的四舍五入。 - **实现类似BREAK语句**:...
位图索引的大小不仅取决于列的基数,还与数据分布有关。例如,性别列的位图索引通常会比B树索引更小,而员工编号(EMPNO)列的位图索引则可能更大。在决策支持系统(DSS)中,由于其较低的并发访问量,位图索引的...
从数据库中随机取记录的基本思路是通过添加一个随机排序字段来打乱记录的顺序,然后通过限制查询结果的数量来获取指定数量的记录。 #### 2. SQL通用方法 在大多数关系型数据库中,可以通过以下SQL语句实现: ```...
在SQL Server和Oracle数据库系统中,函数是进行数据操作和计算的重要工具。下面将详细对比这两者中的一些常用函数。 1. **绝对值** - SQL Server: `ABS(-1)` 返回-1的绝对值,即1。 - Oracle: `ABS(-1)` 与SQL ...