sql随机抽取数据50条_MySQL中随机抽样

2.9 随机抽样

在审计或IT审计中,常常使用抽样,也就是对具有审计相关性的总体中低于百分之百的项目实施审计程序,使所有抽样单元都有被选取的机会,为注册会计师针对整个总体得出结论提供合理基础。简单来说,就是我们需要从总体中选出一些样本,通过对样本的检查,得出结论,再推导出总体的结论。

在Excel中或一些软件中,我们可以非常容易在数据中抽样,但当数据量超过Excel表最大限制时或数据很大时,我们需要在数据库中处理,那么如何用SQL抽样,就是我们应该掌握的。本节我们介绍随机抽样的三种方法,数据仍采用2.6节中APP数据集里AppleStore表作为讲解示例。首先,我们通过select count(*) from AppleStore求出表中有7142条数据,假设我们需要随机抽样出100条数据。

「方法一」

select * from AppleStoreorder by rand()limit 100;

解释:rand()函数会产生0-1之间的随机数,order by rand()根据产生的随机数进行排序。limit 100截取前100行数据。从而达到随机抽样100条数据的目的。当然如果需要抽样出N条数据就使用limit N。即:

select * from 表名order by rand()limit N;

需要注意的是,虽然这是最简单的方法,并且在数据较小的表执行速度较快,但是当数据较大的时候,查询速度就会较慢。

「方法二」

我们先计算我们需要抽样数据与总体的占比100/7142=0.014,然后通过查询语句随机抽样出上述比例的数据:

select * from AppleStorewhere rand()<0.014

解释:对于每一行数据,都会执行判断条件where rand()<0.014,而rand()是产生0-1的随机函数,那么每条数据都有0.014的机率被筛选出来,最终会筛选出总体×0.014条数据。当然实际筛选出的数据条数不是固定的,它随着数据量越大越接近0.014这个比例。我们为了抽取出刚好100条数据,我们可以稍微提高抽取的比例,然后使用limit 100截取前100条数据:

select * from AppleStorewhere rand()<0.015limit 100;

「方法三」

本方法需要表中有一列是连续编号的数字,一般的表中id或序号都是连续编号的,我们可以直接使用。如果没有连续编号的列,那么我们需要人为的创建一列序号数据。在AppleStore中无论是id还是序号都是不连续的,所以我们首先新增一列,列名为‘num’。

新增列语法:

alter table 表名 add column 列名 数据类型;

比如,给AppleStore新增一列num,数据类型为int:

alter table AppleStore add column num int;

删除列语法:

alter table 表名 drop column 列名;

修改列名语法:

alter table 表名 change 原列名 新列名 数据类型;

以上是对列操作的语句用法,下面我们给创建的num列添加连续的序号:

set @rn=0;update AppleStore set num=(@rn:=@rn+1);

解释:在SQL中命名一个变量需要在前面加一个@符号,这里我们命名一个代表行数的变量@rn(row number)。update 表名 set 列名=值 where 列名=某值是修改值的语法。这里我们用num=(@rn:=@rn+1)使列num的值递增增加。

需要注意的是在使用update语句里,可能会报错:Error Code 1175 You are using safe update mode。也就是如果没有加where限制条件更新值是不允许的。这里我们关闭安全更新模式:

SET SQL_SAFE_UPDATES = 0;

通过上述步骤,我们给原表增加了递增的连续编号列num列。我们现在就可以根据num列进行随机抽样。

set @max=7142;set @min=1;select * from AppleStore a join  (select floor(@min+(@max-@min+1)*rand()) as num  from AppleStore  limit 100) b on a.num=b.numlimit 100;

解释:我们将num列的最大编号、最小编号分别命名为变量@max和@min。

select floor(@min+(@max-@min+1)*rand()) as numfrom AppleStorelimit 100

该子句的作用是随机生成100个num序号。其中floor()函数是对一个数向下取整,如floor(1.2)=1,这里采用向下取整,而不使用四舍五入的原因是防止抽样出的数据超过序号的最大值。该子句查询结果,我们重命名为表b,将表a,表b通过序号内连接,查找出b表中随机抽样出的100个序号所对应的数据。可以看出我们对序号的要求并不需要从1开始,它可以从任意值开始,只要序号是连续的。本方法在数据量大的情况下也有较快的查询速度。

上面我们添加num列是直接在原表上添加列并生成递增连续编号,很多时候修改原数据表是不妥的,可以使用with as将新增num列后的查询表结果作为可以被引用的片断。

select *,row_number() over (order by id) as numfrom AppleStore

row_number() over (order by id) as num,row_number函数将原表数据按id排序后生成序号,重命名为num。该查询语句实际就是在原AppleStore表基础上增加了列num,只是序号只显示在查询结果中,而不是对原表进行修改。我们利用with as将AppleStore用增加的num列来替换。

set @max=7142;set @min=1;with AppleStore as (select *,row_number() over (order by id) as num    from AppleStore)select * from AppleStore a join  (select floor(@min+(@max-@min+1)*rand()) as num  from AppleStore  limit 100) b on a.num=b.numlimit 100;

青藤数据-审计师自己的平台

bff0bc6a7f03f2b876b46a98469cf3ce.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql pdo 事务处理_php中pdo的mysql事务处理实例

phpmysql事务处理的几个步骤:1.关闭自动提交2.开启事务处理3.有异常就自动抛出异常提示再回滚4.开启自动提交注意:mysql只有这个InnoDB驱动是支持事务处理的&#xff0c;默认MyIsAM驱动不支持.下面是实例代码&#xff1a;<?php try{$pdonew pdo("mysql:hostlocalhost;…

spring手动回滚事务_Spring总结---gt;03

什么是事务逻辑上的一组操作&#xff0c;组成这组操作的各个单元&#xff0c;要么全都成功&#xff0c;要么全都失败。事务的特性原子性&#xff1a;事务不可分割一致性&#xff1a;事务执行前后数据完整性保持一致隔离性&#xff1a;一个事务的执行不应该受到其他事务的干扰 持…

java-设计模式(结构型)-【代理模式】

1.代理模式(ProxyMode) 定义&#xff1a;外观模式是对类与类之间关系的描述&#xff0c;而代理模式是对原来的方法添加其他的操作。 代理有“网关”的含义&#xff0c;比如用户访问论坛&#xff0c;则要经过代理(网关)授权给你才能访问&#xff0c;即 游客和注册用户的权限不同…

mysql建表_128、mysql建表和简单sql

EMPLOYEES, 有四个字段&#xff0c;EMPLOYEE_ID:员工表(主键)、DEPT_ID:部门号、EMPLOYEE_NAME:员工姓名、EMPLOYEE_SALARY:员工工资。建表语句CREATE TABLE EMPLOYEES(EMPLOYEE_ID int not null primary key,DEPT_ID int,EMPLOYEE_NAME char(40),EMPLOYEE_SALARY double);检索…

LeetCode 1893. 检查是否区域内所有整数都被覆盖(差分)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。 如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖&#xff0c;那么请你返回 true &a…

Log4j乱码

在log4j.properties里添加encoding , 例如 : log4j.appender.fuscentorg.apache.log4j.DailyRollingFileAppender log4j.appender.fuscent.encodingUTF-8 log4j.appender.fuscent.File/Users/kane/Work/log/core/fuscent.log log4j.appender.fuscent.layoutorg.apache.log4j.P…

mysql的where字句调优_mysql中select和where子句优化的总结

本篇文章给大家带来的内容是关于mysql中select和where子句优化的总结&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。数据库优化:1.可以在单个SQL语句&#xff0c;整个应用程序&#xff0c;单个数据库服务器或多个联网数据库…

数据中台建设与应用_Gartner对于建设数据中台的建议

(文&#xff1a;Gartner高级研究总监 孙鑫)数据中台是中国本土诞生的一个名词&#xff0c;很多企业在“什么是数据中台”和“我要上XX中台”徘徊。其炒作程度跟当年的“大数据” 一词有的一拼&#xff0c;如果用Gartner的炒作周期图来看&#xff0c;数据中台目前已经逼近炒作的…

LeetCode 1894. 找到需要补充粉笔的学生编号

文章目录1. 题目2. 解题1. 题目 一个班级里有 n 个学生&#xff0c;编号为 0 到 n - 1 。 每个学生会依次回答问题&#xff0c;编号为 0 的学生先回答&#xff0c;然后是编号为 1 的学生&#xff0c;以此类推&#xff0c;直到编号为 n - 1 的学生&#xff0c;然后老师会重复这…

C# Excel处理工具

需求&#xff1a;选择一个Excel文件&#xff0c;然后对该Excel文件进行处理&#xff0c;再导出一个处理后的Excel文件。 效果图 声明&#xff1a;我对winform开发不熟&#xff0c;但是我看到许多开发人员做东西只管交差&#xff0c;从不考虑用户体验&#xff0c;也不考虑容错处…

mysql 坚向变横向_(排班表一)使用SQL语句使数据从坚向排列转化成横向排列

知识重点&#xff1a;1.extract(day from schedule01::timestamp)13Extract 属于 SQL 的 DML(即数据库管理语言)函数&#xff0c;同样&#xff0c;InterBase 也支持 Extract&#xff0c;它主要用于从一个日期或时间型的字段内抽取年、月、日、时、分、秒数据&#xff0c;因此&a…

python增加子类的参数_python 子类向父类传递关键字参数

父类构造函数class SoapClient(object):"""Simple SOAP Client (simil PHP)"""def __init__(self, locationNone, actionNone, namespace,certNone, proxyNone, nsNone,soap_nsNone, wsdlNone, wsdl_basedir, ca_certsNone,sessionsFalse, soap_…

LeetCode 1897. 重新分配字符使所有字符串都相等

文章目录1. 题目2. 解题1. 题目 给你一个字符串数组 words&#xff08;下标 从 0 开始 计数&#xff09;。 在一步操作中&#xff0c;需先选出两个 不同 下标 i 和 j&#xff0c;其中 words[i] 是一个非空字符串&#xff0c;接着将 words[i] 中的 任一 字符移动到 words[j] 中…

2015/4/14课堂练习

1.设计题目 书店针对《哈利波特》系列书籍进行促销活动&#xff0c;一共5卷&#xff0c;用编号0、1、2、3、4表示&#xff0c;单独一卷售价8元&#xff0c; 具体折扣如下所示&#xff1a; 本     数量 折扣 …

python 图片背景前景分离_【绝了】用 Python 把朋友头像变表情包!

正文在日常生活中&#xff0c;我们经常会存取一些朋友们的丑照&#xff0c;在这个项目中&#xff0c;我们以萌萌哒的熊猫头作为背景&#xff0c;然后试着在背景图上加入朋友们的照片&#xff0c;效果如下图所示。实现步骤导入朋友的照片(前景照片)&#xff1b;处理前景照片(缩放…

LeetCode 1899. 合并若干三元组以形成目标三元组

文章目录1. 题目2. 解题1. 题目 三元组 是一个由三个整数组成的数组。 给你一个二维整数数组 triplets &#xff0c;其中 triplets[i] [ai, bi, ci] 表示第 i 个 三元组 。 同时&#xff0c;给你一个整数数组 target [x, y, z] &#xff0c;表示你想要得到的 三元组 。 为了…

mysql snowflake_雪花算法-snowflake

雪花算法-snowflake分布式系统中&#xff0c;有一些需要使用全局唯一ID的场景&#xff0c;这种时候为了防止ID冲突可以使用36位的UUID&#xff0c;但是UUID有一些缺点&#xff0c;首先他相对比较长&#xff0c;另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID&a…

nrf52832芯片手册_nRF52832低功耗问题不完全总结

0.前言技术和经历经验都有限&#xff0c;以下内容仅供初学者参考和个人总结记录&#xff0c;不定期更新。都是使能协议栈开启BLE广播的情况协议栈&#xff1a;s132_nrf52_6.1.1SDK&#xff1a;nRF5_SDK_15.3.0_59ac3451.进入低功耗方式nRF52832进入低功耗或保持低功耗方式比较简…

openpyxl 读写 excel

import openpyxl book openpyxl.load_workbook(b.xlsx) # 读取 # sheet book["name_tab"] sheet book.active # rowsheet.max_row # 行数 columnsheet.max_column # 列数 print(row) print(column) for r in range(2, row1): # 跳过表头&#xff0c;行号是从1开…

iOS开发周报-- 第一期

从Java转iOS第一个项目总结 http://www.cocoachina.com/ios/20150417/11595.html icon设计探讨&#xff1a;图标&#xff0c;文字&#xff0c;还是图标加文字&#xff1f; http://www.cocoachina.com/design/20150414/11552.html 为什么整个互联网行业都缺CTO http://www.cocoa…