mysql使用GROUP BY分组实现取前N条记录的方法

 更新时间:2016年06月24日 11:25:48   作者:yiluoAK_47  
这篇文章主要介绍了mysql使用GROUP BY分组实现取前N条记录的方法,结合实例形式较为详细的分析了mysql中GROUP BY分组的相关使用技巧,需要的朋友可以参考下

本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下:

MySQL中GROUP BY分组取前N条记录实现

mysql分组,取记录

GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法。

这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~):

结果:

方法一:

复制代码 代码如下:
SELECT a.id,a.SName,a.ClsNo,a.Score FROM aa a LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score<b.Score group by a.id,a.SName,a.ClsNo,a.Score having count(b.id)<2 ORDER BY a.ClsNo,a.Score desc;

拆开分析:

<!--[if !supportLists]-->1、 <!--[endif]-->LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score<b.Score

同一个班级(每个班级四个人),分数比当前学生高的记录,那就意味这成绩垫底的学生,将会产生三条记录

<!--[if !supportLists]-->2、 <!--[endif]-->group by a.id,a.SName,a.ClsNo,a.Score having count(b.id)<2
a.id,a.SName,a.ClsNo,a.Score可以代表一个学生(以学生分组),如果count(b.id)<2(成绩超过你的人不能多于2个),那就只剩第一第二了。

方法二:

复制代码 代码如下:
SELECT * FROM aa a WHERE 2>(SELECT COUNT(*) FROM aa WHERE ClsNo=a.ClsNo and Score>a.Score) ORDER BY a.ClsNo,a.Score DESC;

这个我觉得是比较有意思的,取每一条记录,判断同一个班级,大于当前成绩的同学是不是小于2个人。

方法三:

复制代码 代码如下:
SELECT * FROM aa WHERE id IN (SELECT id FROM aa WHERE ClsNo=a.ClsNo ORDER BY Score DESC LIMIT 2) ORDER BY a.ClsNo,a.Score DESC;

这种方式进过测试不通过,ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' ,不能在这几个子查询中使用limit。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总

希望本文所述对大家MySQL数据库计有所帮助。

相关文章

  • MySQL 行转列详情

    MySQL 行转列详情

    这篇文章主要介绍了MySQL 行转列详情,MySQL 行转列语句不难,具体的详细资料,感兴趣的小伙伴可以参考一下
    2022-01-01
  • mysql 如何获取两个集合的交集/差集/并集

    mysql 如何获取两个集合的交集/差集/并集

    这篇文章主要介绍了mysql获取两个集合的交集/差集/并集操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 解决MySQL报错:You can‘t specify target table ‘region‘ for update in FROM clause

    解决MySQL报错:You can‘t specify target table ‘region‘ for 

    这篇文章主要给大家介绍了关于MySQL报错:You can‘t specify target table ‘region‘ for update in FROM clause的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • MySQL如何设置某个字段的值自增

    MySQL如何设置某个字段的值自增

    这篇文章主要介绍了MySQL如何设置某个字段的值自增,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 图文详解Mysql使用left join写查询语句执行很慢问题的解决

    图文详解Mysql使用left join写查询语句执行很慢问题的解决

    最近工作中遇到一个非常奇怪的问题,mysql中有两张表,test_info和test_do_info需要进行LEFT JOIN关联查询,下面这篇文章主要给大家介绍了关于Mysql使用left join写查询语句执行很慢问题的解决方法
    2023-04-04
  • 浅谈mysql返回Boolean类型的几种情况

    浅谈mysql返回Boolean类型的几种情况

    这篇文章主要介绍了mysql返回Boolean类型的几种情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • MySQL索引优化实例分析

    MySQL索引优化实例分析

    这篇文章主要介绍了MySQL索引优化实例分析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • MySQL数据库监控软件lepus使用问题以及解决办法

    MySQL数据库监控软件lepus使用问题以及解决办法

    这篇文章主要介绍了MySQL数据库监控软件lepus使用问题及解决办法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • MySQL 服务和数据库管理

    MySQL 服务和数据库管理

    今天MySQL总结一些方法和一些基础的内容,下面文章将围绕MySQL 服务与数据库管理得相关资料展开内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • 详解用SELECT命令在MySQL执行查询操作的教程

    详解用SELECT命令在MySQL执行查询操作的教程

    这篇文章主要介绍了详解用SELECT命令在MySQL执行查询操作的教程,本文中还给出了基于PHP脚本的操作演示,需要的朋友可以参考下
    2015-05-05

最新评论