当前位置:首页 > 数码 > 在不同SQL平台取前百分之N的记录方法

在不同SQL平台取前百分之N的记录方法

admin5个月前 (04-17)数码50
SQL

最近帮业务部门梳理业务报表,其中有个需求是就算某指标等待时间最长的前百分之十,其实就是对等待时长进行倒序排序后,取结果集的前百分之十。这个需求在SQLServer和Oracle上都很容易实现,甚至是在8.0也很容易实现,只是恰好我们业务数据库是MySQL5.7。

不同数据库平台的实现方法

  • SQLServer:使用TOPPercent方法,直接取结果的前(或后)百分之N。
  • Oracle:使用ROWNUM伪列,计算前百分之N的数据。
  • MySQL 8.0:使用窗口函数ROW_NUMBER()OVER(),给排好序的集合添加一个自增长列。
  • MySQL5.X:借助变量来实现,给排好序的集合添加一个自增长列。

SQLServer实现方法

sql SELECT TOP 10 PERCENT FROM City ORDER BY ID DESC;

Oracle实现方法

sql 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) );

MySQL 8.0实现方法

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

MySQL 5.X实现方法

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

总结

上面介绍了不同数据库平台上计算前N%数据的几种方法。其中涉及的一些知识点,需要小伙伴们自己去进一步了解:

  • TOPPercent方法
  • ROWNUM伪列
  • 窗口函数ROW_NUMBER()OVER()
  • MySQL中的变量

希望文章对大家有所帮助,收藏起来留着下次直接套用吧!


SQL如何显示查询结果的前100条?

sqlserver支持top关键字,返回前100条数据。 selecttop100*fromtable;//返回前100行数据mysql支持limit,一个参数:select*fromtablelimit100;//返回前100行记录Oracle需要使用rownum。 select*fromtablewhererownum<=100;//返回前100条数据TOP子句TOP子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP子句是非常有用。 SQLServer的语法:SELECTTOPnumber|percentcolumn_name(s)FROMtable_namelimit子句用于强制select语句返回置顶的记录数,参数必须是整数常量。 一个参数是返回前几条记录;两个参数时,第一个参数指定第一个返回记录行的偏移量(初始记录行的偏移量是0),第二个参数指定返回记录的最大数目。 rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀拓展资料:SQL即结构化查询语言(StructuredQueryLanguage),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。 SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。

sybase怎样通过sql获取前N条记录?麻烦告诉我

这个问题已经N个人问过N次了,首先我觉得取前n行是没有意义的!SYBASE说过在SQL SERVER 中行是没有最佳位置的(但然要是有clustered index 另当别论),从这个侧面看,在SQL SERVER 中前n行是没有实现实现基础的/MS SQL SERVER 是有隐式的 identity 列的所以可以用 select top n 字段 from 表或者 select * from tablename where rowid between 100 and 110如果认为这是SYBASE的不足,我觉得那是肤浅的表现了去年刚接触的时候,也是满地问人,现在想来实在是可笑之及!一点劣见,大家指正~~~

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: SQL

“在不同SQL平台取前百分之N的记录方法” 的相关文章

的原因-高性能场景下选择-Postgres-SQL-而非-MySQL

的原因-高性能场景下选择-Postgres-SQL-而非-MySQL

Introduction When it comes to databases, MySQL and PostgreSQL are two of the most popular optio...

连接最全总结-SQL-提升你的数据库查询技能 (连接最全总结的软件)

连接最全总结-SQL-提升你的数据库查询技能 (连接最全总结的软件)

在关系数据库管理系统 (RDBMS) 中,连接操作是连接两个或多个表的数据的强大工具。通过了解不同的连接类型及其使用方法,您可以构建高效且准确的查询,从而获得所需的见解。 SQL 中的连接类...

SQL-如何让主机轰然倒塌-震惊的消费案例-几条-而闹事者却大言不惭! (sql如何导入数据)

SQL-如何让主机轰然倒塌-震惊的消费案例-几条-而闹事者却大言不惭! (sql如何导入数据)

确真实公司跟着老大能学到很多常识啊,之前确实也不怎样了解线程安保疑问和一些处置方案,如今了解了,也终于基于无法变类成功了一个便捷的配置,明日找老大帮我看看,小菜心里想着,脸上显露了满意的浅笑。...

SQL-中的排名技术-深入探讨-数据库技能进阶 (sql中的order by是什么意思)

SQL-中的排名技术-深入探讨-数据库技能进阶 (sql中的order by是什么意思)

SQL Server 提供了以下四个常用的排名函数: ROW_NUMBER() RANK() DENSE_RANK() NTILE()...

SQL-五大提升-语句性能的小窍门 (SQL五大命令)

SQL-五大提升-语句性能的小窍门 (SQL五大命令)

在进行数据库操作时,优化 SQL 语句是提升性能和效率的关键步骤之一。无论处理的是大规模数据还是简单的查询,优化 SQL 语句都可以明显改善系统的响应时间和资源利用率。 使用内...

百万数据查问优化技巧-SQL-Server-则-30 (百万数据查问题怎么查)

百万数据查问优化技巧-SQL-Server-则-30 (百万数据查问题怎么查)

互联网时代的进程越走越深,经常使用的人也越来越多,关于MySQL的数据库优化指南很多,而关于SQLSERVER的T-SQL优化指南看下来比拟少,近期有学习SQLSERVER的同窗识到SQLSERV...