mysql5.7版本先order by再group by失效
最近发现了一个mysql5.7版本与5.6版本在group by子句中使用order by导致order by失效的情况,记录一下。
sql如下:
select * from ( select * from risk order by data_month desc ) a group by a.sale_code;
因为月份字段是varchar,所以只能用order by进行排序找最新月份数据,这样写在mysql5.6版本是正常的,查询的最新月份的数据。但是在mysql5.7版本,order by被优化掉了,并没有生效。
解决方案
方案一
这是我看网上最多的解决方案,用一个超级大的limit放在order by后面
select * from ( select * from risk order by data_month desc limit 100000000 ) a group by a.sale_code;
方案二
在order by前面加group by id
select * from ( select * from risk group by id order by data_month desc ) a group by a.sale_code;
方案三
加distinct
select * from ( select distinct * from risk order by data_month desc ) a group by a.sale_code;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论