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

2024-04-19 19:28

本文主要是介绍mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解决方案:

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 也是解决方案之一

这篇关于mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918351

相关文章

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊