mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause

server/2024/9/22 22:18:07/

解决方案:

select version(),
@@sql_mode;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

完美的解决方案是:

1 show variables like "sql_mode";
2 
3 set sql_mode='';
4 set sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';

ONLY_FULL_GROUP_BY 是 MySQL 中的一个 SQL 模式(SQL mode),它对 GROUP BY 语句的使用施加了更为严格的限制,以确保查询结果的确定性和一致性。启用此模式后,当在查询中使用 GROUP BY 子句时,只有被明确包含在 GROUP BY 子句中的列或使用聚合函数(如 COUNT(), SUM(), AVG(), MAX(), MIN() 等)处理的列才能出现在 SELECT 列表、HAVING 条件和 ORDER BY 子句中。这样可以避免由于未完全指定分组条件导致的不确定性和潜在错误。以下是关于 ONLY_FULL_GROUP_BY 的详细说明
作用与目的:
防止数据不一致:在没有启用 ONLY_FULL_GROUP_BY 的情况下,某些数据库系统(如 MySQL 的某些版本,默认未开启该模式)可能允许在 GROUP BY 查询中选择未被明确分组的非聚合列。这种行为可能导致同一分组内返回任意行的值,从而产生不可预期的结果。
提升查询语义清晰度:启用此模式后,开发者必须显式指定所有出现在 SELECT、HAVING 或 ORDER BY 中的非聚合列,这有助于提高查询语句的可读性与维护性,确保其他开发人员或未来自己能清楚理解查询意图。
影响的查询结构:
SELECT 列表:只有被 GROUP BY 明确列出的列或使用聚合函数计算的表达式可以出现在 SELECT 列表中。
HAVING 条件:在 HAVING 子句中引用的列或表达式也必须遵循上述规则,即必须是分组列或聚合函数。
ORDER BY 子句:排序依据的列同样需要是分组列或聚合函数的结果。
启用与禁用:
启用:可以通过以下方式之一启用 ONLY_FULL_GROUP_BY 模式:
在 MySQL 配置文件(如 my.cnf 或 my.ini)的 [mysqld] 部分添加 sql_mode=ONLY_FULL_GROUP_BY,然后重启 MySQL 服务。
在运行时通过 SQL 命令动态设置(对当前会话生效):

总结来说,ONLY_FULL_GROUP_BY 是一个用于增强 SQL 查询语句严谨性和可预测性的 SQL 模式。启用它可以帮助避免因 GROUP BY 使用不当导致的数据不一致性和查询结果的不确定性。在编写涉及分组操作的 SQL 查询时,建议遵循 ONLY_FULL_GROUP_BY 规则,以确保查询的准确性和可维护性。

当然根据实际情况,如果要保留这种模式,那么就去修改相关的SQL 也是解决方案之一


http://www.ppmy.cn/server/9373.html

相关文章

“EDM邮件营销”如何构建企业获客增长新赛道

在这个瞬息万变的数字时代,企业的营销策略不断进化,以求在激烈的市场竞争中脱颖而出。其中,“EDM(Electronic Direct Mail)邮件营销”作为一项经典且高效的营销手段,正借助先进的技术力量,重新焕…

291个地级市资源错配指数、劳动和资本相对扭曲指数(2006-2021年)

01、数据介绍 资源错配指数(Misallocation Index)是一个用于衡量资源配置效率的指标,它衡量的是生产要素的配置是否合理,是否达到了最优的状态。资源错配指数越高,资源的利用效率越低。资源错配指数主要用于衡量各种生…

本地搭建属于你自己的AI搜索引擎 支持多家AI模型

FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器,并使用 MULTI LLM 生成答案,无需 GPU。用户可以提出问题,系统将进行多引擎搜索,并将搜索结果合并到LLM中,并根据搜索结果生成答案。全部免费使用。 项目…

【Linux开发 第三篇】vmtools安装,快照

虚拟机克隆 方式一 直接拷贝一份安装好的虚拟机文件,再用VM打开文件即可 方式二 使用vmware的克隆操作(克隆时要先关闭Linux系统) 虚拟机快照 如果你在使用虚拟机的时候,担心现在的操作,想回到操作之前的状态&a…

探索RadSystems:低代码开发的新选择(二)

系列文章目录 探索RadSystems:低代码开发的新选择(一)🚪 文章目录 系列文章目录前言一、RadSystems Studio是什么?二、用户认证三、系统角色许可四、用户记录管理五、时间戳记录总结 前言 在数字化时代,低…

设计模式学习笔记 - 开源实战二(下):从Unix开源开发学习应对大型复杂项目开发

概述 前两骗文章,分别从代码编写、研发管理的角度,探讨了如何应对大型复杂软件开发。在研发管理这一部分,又讲到了比较重要的几点,它们分别是编码规范、单元测试、持续重构和 Code Review。其中,前三点在前面的文章中…

2024第七届国际机器人与智能技术会议(ICRIT 2024)即将召开!

2024第七届国际机器人与智能技术会议(ICRIT 2024)将于2024年8月21-23日在中国澳门举行。驾驭智能浪潮,引领机器人时代!ICRIT 2024,在促进学术交流、推动技术创新、加强国际合作等方面发挥着关键作用,是推动…

Selenium(一):八大元素定位

元素定位八大方法 1、find_element_by_id 通过id定位 find_element(By.ID,"kw") #建议使用2、find_element_by_name 通过标签名定位 find_element(By.NAME,"wd") #建议使用3、find_element_link_text 通过链接文本定位 find_element(By.LINK_TEXT,&q…