mysql使用GROUP BY分组实现取前N条记录的方法
程序员文章站
2024-02-18 11:51:22
本文实例讲述了mysql使用group by分组实现取前n条记录的方法。分享给大家供大家参考,具体如下:
mysql中group by分组取前n条记录实现
mysql分...
本文实例讲述了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使用GROUP BY分组实现取前N条记录的方法
-
mysql分组取每组前几条记录(排名) 附group by与order by的研究
-
mysql实现每组取前N条记录的sql,以及后续的组数据量限制
-
mysql 分组 group by, 排序 取每条记录中,时间最大的一条记录
-
mysql分组取每组前几条记录(排名) 附group by与order by的研究_MySQL
-
mysql分组取每组前几条记录(排名) 附group by与order by的研究_MySQL
-
mysql使用GROUP BY分组实现取前N条记录的方法
-
mysql分组取每组前几条记录(排名) 附group by与order by的研究
-
MongoDB聚合分组取第一条记录的案例与实现方法
-
mysql实现每组取前N条记录的sql,以及后续的组数据量限制