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

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;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值