mysql使用group by分组后筛选某个值最大的一列
这里写自定义目录标题mysql使用group by分组后筛选某个值最大的一列其他解决方案:mysql使用group by分组后筛选某个值最大的一列今天在mysql使用group希望group by之后根据某个字段的最大值找出那一列,先看下表结构:需求,根据name1分组,分组后查询出oder字段最大的那一列首先由于本人之前使用的是oracle,记忆中group by之前查询的字段必须为g...
这里写自定义目录标题
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;
更多推荐
所有评论(0)