Mysql升级到5.7后遇到的group by查询问题解决

发布时间 - 2026-01-11 03:14:13    点击率:

发现问题

最近在将mysql升级到mysql 5.7后,进行一些group by 查询时,比如下面的

SELECT *, count(id) as count FROM `news` GROUP BY `group_id` ORDER BY `inputtime` DESC LIMIT 20

就会报如下错误:

SELECT list is not in GROUP BY clause and contains nonaggregated column ‘news.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by.

原因分析

原因是mysql 5.7 模式中。默认启用了ONLY_FULL_GROUP_BY。

ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查。

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by

this is incompatible with sql_mode=only_full_group_by这句话提示了这违背了mysql的规则,only fully group by,也就是说在执行的时候先分组,根据查询的字段(select的字段)在分组的内容中取出,所以查询的字段全部都应该在group by分组条件内;一种情况例外,查询字段中如果含有聚合函数的字段不用包含在group by中,就像我上面的count(id)。

后来发现Order by排序条件的字段也必须要在group by内,排序的字段也是从分组的字段中取出。 不明白的可以去看一下。

解决办法:

1.set@@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

去掉ONLY_FULL_GROUP_BY即可正常执行sql.

2. 不去ONLY_FULL_GROUP_BY, 时 select字段必须都在group by分组条件内(含有函数的字段除外)。(如果遇到order by也出现这个问题,同理,order by字段也都要在group by内)。

3.利用ANY_VALUE()这个函数 https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value

This function is useful for GROUP BY queries when the ONLY_FULL_GROUP_BY SQL mode is enabled, for cases when MySQL rejects a query that you know is valid for reasons that MySQL cannot determine. The function return value and type are the same as the return value and type of its argument, but the function result is not checked for the ONLY_FULL_GROUP_BY SQL mode.

如上面的sql语句可写成

SELECT ANY_VALUE(id)as id,ANY_VALUE(uid) as uid ,ANY_VALUE(username) as username,ANY_VALUE(title) as title,ANY_VALUE(author) as author,ANY_VALUE(thumb) as thumb,ANY_VALUE(description) as description,ANY_VALUE(content) as content,ANY_VALUE(linkurl) as linkurl,ANY_VALUE(url) as url,ANY_VALUE(group_id) as group_id,ANY_VALUE(inputtime) as inputtime, count(id) as count FROM `news` GROUP BY `group_id` ORDER BY ANY_VALUE(inputtime) DESC LIMIT 20

我选用的是第3种方法。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


# mysql  # 5.7  # group  # by  # mysql查询group  # MySQL5.7 group by新特性报错1055的解决办法  # MYSQL GROUP BY用法详解  # mysql5.7同时使用group by和order by报错问题  # 要在  # 会报  # 的是  # 都在  # 这个问题  # 是从  # 不去  # 有一定  # 不明白  # 这句话  # 去看  # 也都  # 升级到  # 种方法  # 这篇文章  # 谢谢大家  # 解决办法  # 也就是说  # 就像我  # 有疑问 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用景安虚拟主机手机版绑定域名建站?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  网站建设保证美观性,需要考虑的几点问题!  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Python文件流缓冲机制_IO性能解析【教程】  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  PHP 500报错的快速解决方法  Laravel怎么在Controller之外的地方验证数据  Laravel如何使用Service Container和依赖注入?(代码示例)  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Android中AutoCompleteTextView自动提示  JavaScript Ajax实现异步通信  EditPlus中的正则表达式 实战(2)  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何在云指建站中生成FTP站点?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Python文件操作最佳实践_稳定性说明【指导】  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  非常酷的网站设计制作软件,酷培ai教育官方网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何快速完成中国万网建站详细流程?  个人网站制作流程图片大全,个人网站如何注销?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  简单实现Android文件上传  如何在阿里云域名上完成建站全流程?  php 三元运算符实例详细介绍  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何安全更换建站之星模板并保留数据?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  jQuery validate插件功能与用法详解  如何快速搭建FTP站点实现文件共享?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  Laravel如何实现事件和监听器?(Event & Listener实战)  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  微信小程序 闭包写法详细介绍  高端建站如何打造兼具美学与转化的品牌官网?  西安专业网站制作公司有哪些,陕西省建行官方网站?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程