mysql使用group by分组后筛选某个值最大的一列

今天在mysql使用group希望group by之后根据某个字段的最大值找出那一列,先看下表结构:
在这里插入图片描述
需求,根据name1分组,分组后查询出oder字段最大的那一列

首先由于本人之前使用的是oracle,记忆中group by之前查询的字段必须为group by字段或者为聚合函数,如max() 、min()等
但是尝试时发现执行 SELECT name1,max(oder),numm FROM test111 t1 group by t1.name1;
结果执行成功了? 当时是持有怀疑态度的,查询结果如:
在这里插入图片描述
很明显numm和name1并不是对应起来的,后来查询资料发现在mysql的某些版本是支持group前面字段并不属于group by字段的。但是字段值默认取得是分组后的第一条数据,笔者认为这种方式很大的误导了用户

所以根据这种特性其实也可以先排序再group by这样默认就是取第一条了,limit 不写的话还不会排序,但是笔者强烈不建议这样写:
SELECT t.* from (select * FROM test111 order by oder desc limit 1000) t group by t.name1;

其他解决方案:

1:根据子查询,理解很简单:
select * from test111 t where (t.name1,t.oder) in (select name1,max(oder) FROM test111 group by name1);
2:
SELECT name1,oder,numm FROM test111 t1 where t1.oder=(select max(oder) from test111 where name1=t1.name1) order by name1;

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐