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)**就是第二步,按照你的业务需求,查出你想要的结果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MySQL如何运行sql文件图文详解(以Navicat做演示)
Navicat是MySQL非常好用的可视化管理工具,功能非常强大,能满足我们日常数据库开发的所有需求,这篇文章主要给大家介绍了关于MySQL如何运行sql文件(以Navicat做演示)的相关资料,需要的朋友可以参考下2024-08-08
MySQL中的log_bin_trust_function_creators系统变量
本文主要介绍了MySQL中的log_bin_trust_function_creators系统变量,log_bin_trust_function_creators是一个全局系统变量,下面就来介绍一下具体使用,感兴趣的可以了解一下2024-09-09
mysql 5.7.5 m15 winx64.zip安装教程
这篇文章主要为大家详细介绍了mysql 5.7.5 m15 winx64.zip安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06
MySQL聚合查询COUNT、SUM、AVG用法实战案例指南
本文主要讲述了MySQL中最常用的聚合函数:COUNT、SUM、AVG的用法、场景和避免误区的方法,通过实战案例深入剖析了每个函数的适用场景和注意事项,感兴趣的朋友跟随小编一起看看吧2026-05-05


最新评论