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

相关文章

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析