iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中GROUP BY分组排序获取topN相关的示例分析
  • 616
分享到

MySQL中GROUP BY分组排序获取topN相关的示例分析

2024-04-02 19:04:59 616人浏览 独家记忆
摘要

这篇文章主要介绍Mysql中GROUP BY分组排序获取topN相关的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! mysql VERSioN

这篇文章主要介绍Mysql中GROUP BY分组排序获取topN相关的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

mysql VERSioN : 5.5.45
ENGINE    : InnoDB

问题描述:
    获取成绩表中每位同学成绩排名前n的记录。

表结构:
MySQL中GROUP BY分组排序获取topN相关的示例分析

表数据:
MySQL中GROUP BY分组排序获取topN相关的示例分析

法一(用户变量):
①首先我先得到每组排名的所有结果

点击(此处)折叠或打开

  1. select @gp_row:=if(@name=name,@gp_row+1,1) as gp_row,@name:=name,id,name,grade from td ,(select @gp_row:=0,@name:='') as temp order by name,grade desc;

得到如下结果:
MySQL中GROUP BY分组排序获取topN相关的示例分析

②在把该结果作为中间表,查询top N的数据

点击(此处)折叠或打开

  1. select id ,name ,grade from (select @gp_row:=if(@name=name,@gp_row+1,1) as gp_row,@name:=name,id,name,grade from td ,(select @gp_row:=0,@name:='') as temp order by name,grade desc) as tb_gp_rank where gp_row<=2;

得到结果如下:
MySQL中GROUP BY分组排序获取topN相关的示例分析

③查看执行计划
MySQL中GROUP BY分组排序获取topN相关的示例分析
我们可以看到,对td使用了一个全表扫面(和索引字段相关和select,where字段相关等),并且用到了using filesort,当表记录数过多的时候效率肯定不高,这也没办法,数据无序以及没有相关索引以及select字段还有一些关系,但是这种查询方式基本可以满足这一类型的基本需求。

法二(uNIOn):
①在知道分组字段的情况下,可以使用union合并各组结果集

点击(此处)折叠或打开

  1. (select id ,name ,grade from td where name='tab' order by grade desc limit 2) union (select id ,name ,grade from td where name='lily' order by grade desc limit 2);

MySQL中GROUP BY分组排序获取topN相关的示例分析

②查看执行计划
MySQL中GROUP BY分组排序获取topN相关的示例分析
可以发现,在此种表结构下,union操作会扫n次全表(和索引字段相关),即多少个union结果集就有多少次。这种方法还需知道需要分组排序的具体的字段值,使用上有限制。

法三(子查询):
①子查询的方式适合选择并列top N的情况

点击(此处)折叠或打开

  1. select a.* from td a where (select count(*) from td where td.name=a.name and td.grade>a.grade)<2 order by name,grade desc;

MySQL中GROUP BY分组排序获取topN相关的示例分析
此时在插入一条数据 insert into td select null,'tab',76;
再次查询可得结果如下
MySQL中GROUP BY分组排序获取topN相关的示例分析
也就是说在排序之后最后一条数据如果有重复的则都会作为结果集返回,即第一次查询的结果,tab 成绩为44位于第二名的数据有两条。

法四(join连接):即把子查询转换为join连接,这里就不在测试

以上是“Mysql中GROUP BY分组排序获取topN相关的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中GROUP BY分组排序获取topN相关的示例分析

本文链接: https://www.lsjlt.com/news/62457.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MySQL中GROUP BY分组排序获取topN相关的示例分析
    这篇文章主要介绍MySQL中GROUP BY分组排序获取topN相关的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! MySQL VERSION...
    99+
    2024-04-02
  • MySQL中Order By多字段排序规则的示例分析
    小编给大家分享一下MySQL中Order By多字段排序规则的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySql ...
    99+
    2024-04-02
  • js中排序与重组的示例分析
    小编给大家分享一下js中排序与重组的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!示例:function in...
    99+
    2024-04-02
  • javascript中Array.sort()数组排序的示例分析
    这篇文章主要为大家展示了“javascript中Array.sort()数组排序的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中Array.sort()数组排序的示...
    99+
    2023-06-20
  • javascript中数组排序与对象排序的示例分析
    这篇文章将为大家详细讲解有关javascript中数组排序与对象排序的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。javascript  数组排序与对...
    99+
    2024-04-02
  • MySQL中分类排名和分组TOP N的示例分析
    这篇文章主要介绍MySQL中分类排名和分组TOP N的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!表结构学生表如下:CREATE TABLE `t_student` ...
    99+
    2023-06-26
  • 关于java的arrays数组排序AJPFX的示例分析
    这期内容当中小编将会给大家带来有关关于java的arrays数组排序AJPFX的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java API对Arrays类的说明是:此类包含用来操作数组(比如排...
    99+
    2023-06-02
  • MySQL中关于排序order by limit值不稳定分析
    这篇文章主要介绍“MySQL中关于排序order by limit值不稳定分析”,在日常操作中,相信很多人在MySQL中关于排序order by limit值不稳定分析问题上存在疑惑,小编查阅了各式资料,整...
    99+
    2024-04-02
  • web中桶排序的示例分析
    这篇文章主要为大家展示了“web中桶排序的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中桶排序的示例分析”这篇文章吧。桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也...
    99+
    2023-06-27
  • web中堆排序的示例分析
    这篇文章给大家分享的是有关web中堆排序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种**选择排序,**它的最坏,最好,平均时间复杂度均为O(...
    99+
    2023-06-27
  • php数组排序并保持索引关系的示例分析
    这篇文章主要介绍了php数组排序并保持索引关系的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(P...
    99+
    2023-06-14
  • C++中对象排序的示例分析
    这篇文章主要介绍C++中对象排序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.对象比较介绍在排序中进行交换的前提主要是进行对象间的 比较、而常见的排序是对一个数组排序,然后对每个数组内容进行比...
    99+
    2023-06-29
  • javascript中排序算法的示例分析
    小编给大家分享一下javascript中排序算法的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!冒泡排序冒泡排序需要两个嵌套的循环. 其中, 外层循环移动游标; 内层循环遍历游标及...
    99+
    2024-04-02
  • Java数组实现堆排序的示例分析
    这篇文章主要为大家展示了“Java数组实现堆排序的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java数组实现堆排序的示例分析”这篇文章吧。数组全部入堆,再出堆从后向前插入回数组中,数...
    99+
    2023-05-30
    java
  • Oracle相关组件版本信息的示例分析
    小编给大家分享一下Oracle相关组件版本信息的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境准备使用Oracle的...
    99+
    2024-04-02
  • J2EE Web组件中中文及相关问题的示例分析
    这篇文章给大家分享的是有关J2EE Web组件中中文及相关问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 XML:namespace prefix = o ns = "urn:s...
    99+
    2023-06-03
  • css中counter相关属性的示例分析
    小编给大家分享一下css中counter相关属性的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!COUNTER-RESET明译为计数器重置。形如: cou...
    99+
    2023-06-08
  • py3nvml实现GPU相关信息读取的示例分析
    py3nvml实现GPU相关信息读取的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一...
    99+
    2023-06-26
  • PHP中关联数组的示例分析
    这篇文章主要为大家展示了“PHP中关联数组的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP中关联数组的示例分析”这篇文章吧。PHP 关联数组关联数...
    99+
    2024-04-02
  • Xamarin.FormsShell中Shell相关类体系的示例分析
    这篇文章主要为大家展示了“Xamarin.FormsShell中Shell相关类体系的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Xamarin.FormsShell中Shell相关类...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作