我的编程空间,编程开发者的网络收藏夹
学习永远不晚

数据库有哪些提取前百分之N的记录的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

数据库有哪些提取前百分之N的记录的方法

这篇文章主要讲解了“数据库有哪些提取前百分之N的记录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库有哪些提取前百分之N的记录的方法”吧!

数据库有哪些提取前百分之N的记录的方法

这个需求在SQL Server和Oracle上都很容易实现,甚至是在MySQL 8.0也很容易实现,只是恰好我们业务数据库是MySQL 5.7

先给大家介绍下不同数据库平台的实现方法。

SQL Server实现方法

SQL Server上有个TOP Percent的方法可以直接取结果的前(或后)百分之N例如有如下一张City表

数据库有哪些提取前百分之N的记录的方法

我们取前10%的数据记录可以这样写:

SELECT  TOP 10 PERCENT   * FROM City ORDER BY ID DESC

结果如下:

数据库有哪些提取前百分之N的记录的方法

Oracle实现方法

Oracle有个ROWNUM伪列可以用来帮助我们计算前百分之N。ROWNUM伪列的特点:

  • ROWNUM是按照记录插入时的顺序排序的

  • ROWNUM并不实际存在,是对筛选后的结果集的一个排序,如果不存在结果集就不会有ROWNUM

  • ROWNUM不能用基表名作为前缀

  • 在使用ROWNUM进行查询时,请注意:

1)若使用大于号(>),则只能使用(>0),其他均不可以 2)若使用小于号(<),同一般情况  3)若使用等于号(=),则只能使用等于1(=1)我们可以先计算出整个表的记录行数量

SELECT COUNT(*) CNT FROM City

然后根据count聚合查询总条数乘以百分比,来确定要查询的条数

SELECT 0.1*COUNT(*) CNT FROM City

最后取出伪列小于共有数据的百分比的数据

SELECT * FROM CITY WHERE ID IN ( SELECT ID FROM  ( SELECT ID FROM CITY ORDER BY ID DESC ) WHERE ROWNUM < (SELECT COUNT(*)*0.1 FROM CITY) )

注意:Oracle不支持子查询内ORDER BY,需要在外面再嵌套一层。

MySQL 8.0的实现方法

MySQL 8.0的实现方法主要是借助窗口函数ROW_NUMBER()  OVER()。其实就是给排好序的集合添加一个自增长列,与Oracle的ROWNUM有点类似

SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY ID DESC) rn FROM  City ORDER BY ID DESC ) a WHERE a.rn<=(SELECT 0.1*COUNT(*) FROM City)

MySQL 5.X的实现方法

我们知道MySQL 5.X是没有开窗函数ROW_NUMBER() OVER()的,那该如何实现呢?

这里我们需要借助变量来实现,其实思路还是创建一个自增长列,只是方法不同。

SELECT    A.*,   @row_num:=@row_num+1 AS ROW_NUM FROM    City A , (SELECT @row_num:=0) B ORDER BY ID DESC

这样我们就可以得到一张有自增长列的结果集了,接下来还是按照上面类似的方法,取前10%即可。

SELECT * FROM ( SELECT    A.*,   @row_num:=@row_num+1 AS ROW_NUM FROM    City A , (SELECT @row_num:=0) B ORDER BY ID DESC ) C WHERE C.ROW_NUM<=(@row_num*0.1)

其实MySQL 5.X也挺简单的,只是当时不怎么想用变量,想看看有没有其他办法,最后发现还是得用变量

感谢各位的阅读,以上就是“数据库有哪些提取前百分之N的记录的方法”的内容了,经过本文的学习后,相信大家对数据库有哪些提取前百分之N的记录的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

数据库有哪些提取前百分之N的记录的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vba提取网页数据的方法有哪些

在VBA中,提取网页数据的方法有以下几种:1. 使用IE对象:使用Internet Explorer对象来打开网页,并使用其提供的方法和属性来提取网页数据。可以使用`CreateObject`函数来创建IE对象,然后使用`Navigate`
2023-09-12

爬虫解析提取数据的方法有哪些

本篇文章为大家展示了爬虫解析提取数据的方法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一、分析网页以经典的爬取豆瓣电影 Top250 信息为例。每条电影信息在 ol class 为 gri
2023-06-15

mysql数据库分页优化的方法有哪些

MySQL数据库分页优化的方法主要有以下几种:1. 使用索引:在分页查询中,使用合适的索引可以大大提高查询效率。可以为经常进行分页查询的字段添加索引,以加快查询速度。2. 使用LIMIT关键字:LIMIT关键字可以指定返回结果的起始位置和数
2023-08-30

使用sqlplus命令登录Oracle数据库的方法有哪些

有以下几种方法可以使用sqlplus命令登录Oracle数据库:1. 在命令行中输入sqlplus命令,然后输入用户名、密码和数据库连接字符串。例如:```sqlplus username/password@database```2. 在命
2023-08-18

在ABAP里取得一个数据库表记录数的两种方法分别是什么

本篇文章给大家分享的是有关在ABAP里取得一个数据库表记录数的两种方法分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法1:使用函数EM_GET_NUMBER_OF_
2023-06-04

如何使用PHP进行数据库的分页查询?(PHP实现数据库分页查询的方法有哪些?)

摘要本文详细介绍了如何使用PHP进行数据库分页查询。提供了五种常用方法:LIMIT子句、OFFSET子句、rownum()函数、自连接和分页库。每种方法的语法、优点和缺点都进行了阐述,可帮助您根据特定需求选择合适的方法。分页查询可以优化大型数据集的性能并防止数据库过载。
如何使用PHP进行数据库的分页查询?(PHP实现数据库分页查询的方法有哪些?)
2024-04-02

如何优化PHP与数据库的交互性能?(有哪些方法可以提高PHP与数据库交互的效率?)

优化PHP与数据库交互性能的方法包括:使用缓存、优化查询、使用连接池、使用事务、批处理更新、异步查询、垂直/水平拆分、使用NoSQL数据库、性能分析、数据库管理工具、服务器设置优化和数据库监控。通过实施这些技术,可以提升性能、减少延迟并提高PHP应用程序的整体效率。
如何优化PHP与数据库的交互性能?(有哪些方法可以提高PHP与数据库交互的效率?)
2024-04-02

当父表中的记录被删除时,有哪些不同的方法可以保持子表中的数据完整性?

当两个表通过外键连接,并且父表中的数据被删除时,如果子表中也存在该记录,则可以采取以下方式来维护数据完整性:级联删除如果从主表中删除了外键的值,此选项将同时从子表中删除该记录。置空删除 如果从主表中删除了外键的值,此选项将将子表中该记录的所
2023-10-22

编程热搜

目录