`
streamsong
  • 浏览: 79889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ORACLE随机取数据

阅读更多

目前负责的这个数字化项目,需要开发个质检工具,实现每次随机取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;

1
0
分享到:
评论

相关推荐

    Oracle从表中随机抽取记录

    如何在Oracle数据表中随机抽取部分记录的方法

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

    本文以实例的方式来讲解如何抽取随机数的多种方法。

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

    对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀

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

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

    Oracle如何实现从特定组合中随机读取值

     一、利用DBMS_RANDOM.RANDOM函数随机生成数值,然后对数值进行取模,如果我们要在10个元素中随机读取的话,那我们需要对10进行取模。  二、再将取模后的值利用CASE WHEN语句与元素进行关联。  譬如,我有一个...

    程序员的SQL金典6-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典7-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典4-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典3-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典.rar

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    Sqlserver2000经典脚本

    6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(定义各汇总列标题).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序及汇总列...

    C#基类库(苏飞版)

    1.数据访问基础类(基于Oracle),主要是用来访问Oracle数据库的。 2.得到最大值;是否存在;是否存在(基于OracleParameter ); 3.执行SQL语句,返回影响的记录数; 4.执行多条SQL语句,实现数据库事务; 5.执行带一个...

    Java面试宝典2020修订版V1.0.1.doc

    20、从数据库中随机取50条 47 21、order by与group by的区别 47 22、commit在哪里会运用 47 23、行转列、列换行怎么转 48 24、什么是PL/SQL? 49 25、序列的作用 50 26、表和视图的关系 50 27、oracle基本数据类型 ...

    JAVA上百实例源码以及开源项目源代码

    利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实世界模型  基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个...

    C#编程经验技巧宝典

    100 &lt;br&gt;0158 如何将二进制数转换为十六进制数 100 &lt;br&gt;0159 如何实现0~9之间随机整数 101 &lt;br&gt;0160 如何实现0~1之间随机数 101 &lt;br&gt;0161 如何返回数字的绝对值 101 &lt;br&gt;5.2 控件数据处理...

    asp.net知识库

    随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否...

    mysql数据库my.cnf配置文件

    # 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED log_bin = mysql-bin binlog_format = mixed expire_logs_days = 30 #超过30天的binlog删除 slow_query_log = 1 long_query_time = ...

    经典SQL语句大全

    17、说明:随机取出10条数据 select top 10 * from tablename order by newid() 18、说明:随机选择记录 select newid() 19、说明:删除重复记录 1),delete from tablename where id not in (select max(id) from ...

    数据库操作语句大全(sql)

    17、说明:随机取出10条数据 select top 10 * from tablename order by newid() 18、说明:随机选择记录 select newid() 19、说明:删除重复记录 1),delete from tablename where id not in (select max(id) from ...

    sql经典语句一部分

    17、说明:随机取出10条数据 select top 10 * from tablename order by newid() 18、说明:随机选择记录 select newid() 19、说明:删除重复记录 1),delete from tablename where id not in (select max(id) from ...

Global site tag (gtag.js) - Google Analytics