Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > Mysql GROUP BY查询每组某值最大数据

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)**就是第二步,按照你的业务需求,查出你想要的结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文