Mysql GROUP BY查询每组某值最大的一条数据
作者:芥焉丶
这篇文章主要介绍了Mysql GROUP BY查询每组某值最大的一条数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Mysql GROUP BY查询每组某值最大的一条数据
表结构如下
需求
查询每个学科(type)最高分(score)
想要的结果如下:
尝试通过group by order by 查询 sql 如下
SELECT * FROM `reports` GROUP BY type ORDER BY score DESC;
结果如下:
order by 是在最后执行并不能查询到想要的结果
尝试通过group by 排序后的子查询 sql 如下
SELECT a.* FROM ( SELECT * FROM `reports` ORDER BY score DESC) AS a GROUP BY a.type;
结果如下:
并没有得道正确的结果
然后查询资料看到有博客说需要在子查询加上limit,如下sql:
SELECT a.* FROM ( SELECT * FROM `reports` ORDER BY score DESC LIMIT 10) AS a GROUP BY a.type;
结果如下:
结果是对了,但是总觉得奇怪,为什么要加 limit ,这不是我想要的
###尝试通过聚合函数查询,sql如下:
SELECT s.*, max( s.score ) FROM ( SELECT * FROM `reports` GROUP BY type, name ORDER BY score DESC ) s GROUP BY s.type
结果如下:
搞定max( s.score ) 亦可拿掉
Mysql group by分组后每组选取一条结果
直接说思路
- 按照某个字段进行分组
- 选出你想要的结果
- 回表查询
举个栗子
需求:
查询订单表(id, user_id, create_time, update_time),按照user_id分组,查询该表中,每个用户最新的一条订单(表中update_time最大的)
select * from order ss, (select MAX(sa.update_time) as time, sa.user_id FROM order sa where sa.user_id is not null GROUP BY sa.user_id) aa where ss.user_id = sa.user_id and ss.update_time = sa.time
**MAX(sa.update_time)**就是第二步,按照你的业务需求,查出你想要的结果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。