mysql5.7版本先order by再group by失效的问题及解决

 更新时间:2026年03月28日 13:48:52   作者:代码如风似少年  
在MySQL 5.7中,GROUP BY 子句使用 ORDER BY 时可能导致 ORDER BY 失效,解决方案包括:在 ORDER BY 后面使用大 LIMIT、在 ORDER BY 前加 GROUP BY ID 或使用 DISTINCT

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;

总结

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

相关文章

  • 解决bash: mysql: command not found 的方法

    解决bash: mysql: command not found 的方法

    解决bash: mysql: command not found 的方法,需要的朋友可以参考一下
    2013-03-03
  • 自学MySql内置函数知识点总结

    自学MySql内置函数知识点总结

    在本篇文章里小编给大家整理的是关于MySql内置函数的知识点总结内容,需要的朋友们可以学习参考下。
    2020-01-01
  • Can''t connect to MySQL server on ''localhost'' (10048)问题解决方法

    Can''t connect to MySQL server on ''localhost'' (10048)问题解决方

    windows 2003服务器运行php的提示Can't connect to MySQL server on 'localhost' (10048), 下面来看下解决方法
    2013-09-09
  • Mysql获取id最大值、表的记录总数等相关问题的方法汇总

    Mysql获取id最大值、表的记录总数等相关问题的方法汇总

    在做网站开发时,我们也许会想要取得mysql里id最大的一条记录,这个其实很简单。这篇文章给大家整理了获取一个表的记录数、获取一个表的最大id、获取一个表的auto_increment值等相关问题的答案,有需要的朋友们可以参考借鉴。
    2016-09-09
  • mysql如何将一个列按逗号分割为多列

    mysql如何将一个列按逗号分割为多列

    在MySQL中,将一个列按逗号分割为多列可以通过使用SUBSTRING_INDEX()函数和CROSS JOIN操作实现,本文提供了一个实用的方法,通过创建数字序列和临时表来拆分tags列并计数每个标签的出现次数,适用于处理有限数量的标签值
    2024-09-09
  • mysql数据库导出xml的实现方法

    mysql数据库导出xml的实现方法

    因为有人问到如何将mysql数据库导出为xml文件,所以发现了这篇文章
    2008-09-09
  • mysql5.7 设置远程访问的实现

    mysql5.7 设置远程访问的实现

    这篇文章主要介绍了mysql5.7 设置远程访问的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • MySql闪退和服务无法启动的解决方法

    MySql闪退和服务无法启动的解决方法

    今天小编就为大家分享一篇关于MySql闪退和服务无法启动的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • MySQL执行时间的查询

    MySQL执行时间的查询

    这篇文章主要介绍了MySQL执行时间的查询,查询频繁的数据库和查询执行时间长的sql,文章中有详细的代码实例,感兴趣的同学可以参考阅读
    2023-04-04
  • MySQL中的视图特性使用及说明

    MySQL中的视图特性使用及说明

    视图是虚拟表,由查询定义,包含列和行数据,其与基表数据相互影响,修改任一方均会同步变化,创建需唯一命名,不可添加索引或触发器,可提升安全性,ORDER BY在视图中优先,但被SELECT中的覆盖
    2025-10-10

最新评论