当前位置: 移动技术网 > IT编程>数据库>Mysql > mysql使用GROUP BY分组实现取前N条记录的方法

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

2017年12月12日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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数据库计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网