首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql查询错误:选择列表不在GROUP BY子句中,并且包含非聚集列,与sql_mode=only_full_group_by不兼容

这个错误是由于MySQL的sql_mode设置为only_full_group_by时,对于GROUP BY查询中的选择列表存在非聚集列的情况下,会报错。这个错误的原因是MySQL的默认行为是对GROUP BY查询中的选择列表进行隐式的聚集操作,但是在only_full_group_by模式下,MySQL要求选择列表中的每个非聚集列都必须在GROUP BY子句中出现。

解决这个错误的方法有两种:

  1. 修改sql_mode:可以通过修改MySQL的配置文件或者在查询前执行SET语句来修改sql_mode,将其设置为非only_full_group_by模式。例如,可以执行以下语句来修改sql_mode:
代码语言:txt
复制
SET sql_mode = '';

这样就可以关闭only_full_group_by模式,但需要注意关闭该模式可能会导致其他潜在的问题,需要谨慎使用。

  1. 调整查询语句:另一种解决方法是调整查询语句,确保选择列表中的每个非聚集列都在GROUP BY子句中出现。例如,如果有以下查询语句:
代码语言:txt
复制
SELECT column1, column2, SUM(column3) FROM table1 GROUP BY column1;

可以修改为:

代码语言:txt
复制
SELECT column1, column2, SUM(column3) FROM table1 GROUP BY column1, column2;

这样就将非聚集列column2也包含在了GROUP BY子句中,符合only_full_group_by模式的要求。

腾讯云提供了多种与MySQL相关的产品和服务,例如云数据库MySQL、云数据库TDSQL for MySQL等。这些产品提供了高可用、高性能的MySQL数据库服务,可以满足不同场景下的需求。具体产品介绍和链接地址可以参考腾讯云官方文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解析SQLSyntaxErrorException异常:not in GROUP BY clause

SQL查询中的SELECT列表中的表达式不在GROUP BY子句中并且包含聚合'cnpc.T1.id',这个GROUP BY子句中的列上没有函数依赖关系。...这与sql_mode=only_full_group_by兼容。...解决方案 你可以采取以下几种方法来解决这个问题: 在GROUP BY子句中包含所有聚合:根据错误信息,你可以尝试在GROUP BY子句中包含'cnpc.T1.id',即使它不是聚合。...这样做可以满足only_full_group_by模式的要求。 使用聚合函数:如果你不想在GROUP BY子句中包含'cnpc.T1.id',你可以考虑使用聚合函数来处理该的值。...修改sql_mode:如果你不需要启用only_full_group_by模式,你可以修改数据库的sql_mode设置,将其更改为允许聚合在SELECT列表中。

37330

MySQL 5.6 5.7 组内排序的区别

MySQL 5.7 对比 5.6 有很多的变化。一个常见的需求:按条件分组后,取出每组中某字段最大值的那条记录。其实就是组内排序的问题,我的做法是:查询先进行倒序排序,外层查询分组。...在标准 SQL 中,包含 GROUP BY 子句的查询 不能引用 select 列表中未在 GROUP BY 子句中命名的。...MySQL 扩展了 GROUP BY 的标准 SQL 使用,以便选择列表可以引用 GROUP BY 子句中未命名的集合。这意味着前面的查询MySQL 中是合法的。...如果启用了 ONLY_FULL_GROUP_BY SQL 模式(默认情况下),MySQL 将拒绝对列表,HAVING 条件或 ORDER BY 列表查询引用在 GROUP BY 子句中既未命名的集合...你可以通过使用 ANY_VALUE() 使禁用了 ONLY_FULL_GROUP_BY 的 SQL,来实现相同的效果来引用聚合

55420

MySQL:解决MySQL5.7以上使用GROUP BY语句时报错

官网文档的原话: 图片 大概意思就是说:拒绝选择列表、HAVING 条件或 ORDER BY 列表引用聚合查询,这些不在 GROUP BY 子句中命名,也不在功能上依赖于(唯一确定的)GROUP...(在 5.7.5 之前,MySQL 不检测函数依赖,并且默认启用 ONLY_FULL_GROUP_BY。有关 5.7.5 之前的行为的描述,请参阅 MySQL 5.6 参考手册。)...标准 SQL 的 MySQL 扩展允许在 HAVING 子句中引用选择列表中的别名表达式。...在 MySQL 5.7.5 之前,启用 ONLY_FULL_GROUP_BY 会禁用此扩展,因此需要使用别名表达式编写 HAVING 子句。...解决方法一 1、先使用SQL查询sql_mode select @@global.sql_mode 2、重新设置sql_mode,删除ONLY_FULL_GROUP_BY set @@global.sql_mode

1.9K20

MySQL报错1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated colu

以上的版本中,对于 group by 的这种聚合操作,如果在select 中的,没有在group by 中出现,那么这个SQL是不合法的,因为不在group by的从句中,所以对于设置了这个mode...ONLY_FULL_GROUP_BY的设定,将不允许查询字段包括聚集 查询mysql服务器版本:以下命令在终端或者navicat中输入执行均可。...默认: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 方法一: 查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY...值得话,在进行查询时必须要将select的字段都包含group by 中。...sql_mode常用值: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么这个SQL是不合法的,因为不在GROUP BY

35850

ERROR 1055 (42000): Expression #1 of SELECT list is not in

; this is incompatible with sql_mode=only_full_group_by 字面意思理解是sql_model=only_full_group_by限制了,导致在以往MYSQL...:ONLY_FULL_GROUP_BY的设定,将不允许查询字段包括聚集 查询mysql服务器版本: select @@version 显示: 5.7.10 #查看sql_mode的语法 select...,所以去掉就好 方法一: 查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select的字段都包含在...关闭正在运行的mysql 2. 修改/etc/my.cnf,将sql_mode=中的only_full_group_by给删掉 3....:对于GROUP BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么这个SQL是不合法的,因为不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入

1.4K40

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregate

; this is incompatible with sql_mode=only_full_group_by 字面意思理解是sql_model=only_full_group_by限制了,导致在以往MYSQL...:ONLY_FULL_GROUP_BY的设定,将不允许查询字段包括聚集 查询mysql服务器版本: select @@version 显示: 5.7.10 #查看sql_mode的语法 select...,所以去掉就好 方法一: 查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select的字段都包含在...关闭正在运行的mysql 2. 修改/etc/my.cnf,将sql_mode=中的only_full_group_by给删掉 3....: 对于GROUP BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么这个SQL是不合法的,因为不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入

1.1K30

ERROR 1055 (42000): Expression #1 of SELECT list is not in

; this is incompatible with sql_mode=only_full_group_by 字面意思理解是sql_model=only_full_group_by限制了,导致在以往MYSQL...:ONLY_FULL_GROUP_BY的设定,将不允许查询字段包括聚集 查询mysql服务器版本: select @@version 显示: 5.7.10 #查看sql_mode的语法 select...,所以去掉就好 方法一: 查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select的字段都包含在...关闭正在运行的mysql 2. 修改/etc/my.cnf,将sql_mode=中的only_full_group_by给删掉 3....:对于GROUP BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么这个SQL是不合法的,因为不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入

1.1K20

小白学习MySQL - only_full_group_by的校验规则

by字段不同的SQL在Oracle中跑一定是报错,提示如下,即要求在select中的聚合必须出现在group by子句中,为什么在MySQL中就可以执行?...如果在SELECT中的,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为不在GROUP BY从句中。...在MySQL 5.7以上,sql_mode参数值是默认包含这个only_full_group_by校验规则的,但是在5.7以下,包含此规则,如上的SQL,就是跑在5.5, show variables...,group by中未包含聚合是c1,而且明确提示,他和sql_mode=only_full_group_by兼容, select c1, c2 from test group by c2; SQL...子句中包含聚合的SQL,就需要写SQL的同学能保证select和group by的一致性,否则执行的SQL很可能得到的就是错误的结果集,从MySQL 5.7开始就默认支持校验规则only_full_group_by

39630

MySQL高版本使用group by报错的解决办法

如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表查询引用在GROUP BY子句中既未命名的集合,也不在功能上依赖于它们...而5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。...mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by 看一下ONLY_FULL_GROUP_BY的意思是:对于GROUP...BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么这个SQL是不合法的,因为不在GROUP BY从句中,也就是说查出来的必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面...,执行成功,然后执行命令查看一下,果然第一项不在了,然后我们再重启一下mysql服务,再次查询,还在..哈哈。。 那么,接下来放绝招了,还是从Mysql的配置文件下手吧。

1.2K20

GROUP BY 后 SELECT 的限制:which is not functionally dependent on columns in GROUP BY clause

GROUP BY 后 SELECT 的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、...(cname)不在 GROUP BY 的子句中,同时它也不是聚合函数;这与 sql 模式:ONLY_FULL_GROUP_BY 不相容。...BY clause; this is incompatible with sql_mode=only_full_group_by 为什么 GROUP BY 之后不能直接引用原表(不在 GROUP BY...SQL 模式   MySQL 服务器可以在不同的 SQL 模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于 sql_mode 系统变量的值。...0,产生一个warning; 2、Out Of Range,变成插入最大边界值; 3、当要插入的新行中,包含其定义中没有显式DEFAULT子句的NULL的值时,该列缺少值; 解决步骤 MySQL

3K50

Mysql服务器SQL模式 (官方精译)

ONLY_FULL_GROUP_BY 拒绝对选择列表, HAVING条件或ORDER BY列表引用既未在GROUP BY子句中命名也未在功能上依赖(由GROUP BY唯一确定)的 聚合查询。...(在5.7.5之前,MySQL没有检测到函数依赖,并且ONLY_FULL_GROUP_BY默认情况下是启用的。关于5.7.5之前的行为的描述,请参阅MySQL 5.6参考手册。...标准SQL的MySQL扩展允许在HAVING子句中引用 选择列表中的别名表达式。...但是,如果您发现已 ONLY_FULL_GROUP_BY启用导致现有应用程序的查询被拒绝,则这些操作中的任何一个都应恢复操作: 如果可以修改违规查询,则可以这样做,以便聚合在功能上依赖于GROUP...如果无法修改违规查询(例如,如果它是由第三方应用程序生成的),请sql_mode在服务器启动时将系统变量设置为启用 ONLY_FULL_GROUP_BY。

3.3K30

为什么 GROUP BY 之后不能直接引用原表中的

GROUP BY 后 SELECT 的限制   标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM...=only_full_group_by   提示信息:SELECT 列表中的第二个表达式(cname)不在 GROUP BY 的子句中,同时它也不是聚合函数;这与 sql 模式:ONLY_FULL_GROUP_BY...0,产生一个warning;       2、Out Of Range,变成插入最大边界值;       3、当要插入的新行中,包含其定义中没有显式DEFAULT子句的NULL的值时,该列缺少值...SELECT @@sql_mode;      我们可以看到,5.7.21 的默认模式包含ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...就会约束:当我们进行聚合查询的时候,SELECT 的不能直接包含 GROUP BY 子句中

1.7K10

神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的

GROUP BY 后 SELECT 的限制   标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM...=only_full_group_by   提示信息:SELECT 列表中的第二个表达式(cname)不在 GROUP BY 的子句中,同时它也不是聚合函数;这与 sql 模式:ONLY_FULL_GROUP_BY...0,产生一个warning;       2、Out Of Range,变成插入最大边界值;       3、当要插入的新行中,包含其定义中没有显式DEFAULT子句的NULL的值时,该列缺少值...,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION     而第一个:ONLY_FULL_GROUP_BY 就会约束:当我们进行聚合查询的时候,SELECT 的不能直接包含...GROUP BY 子句中

2.1K20

已解决:mysql报错:1055 - this is incompatible with sql_mode=only_full_group_by

mysql查询时报错: [Err] 1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated...incompatible with sql_mode=only_full_group_by 原因: MySQL 5.7.5及以上功能依赖检测功能。...默认情况下启用ONLY_FULL_GROUP_BY SQL模式,MySQL将拒绝选择列表,HAVING条件或ORDER BY列表查询引用在GROUP BY子句中既未命名的集合,也不在功能上依赖于它们...(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”)。...解决思路:将默认的“ONLY_FULL_GROUP_BY”配置去掉即可; 可通过 select @@global.sql_mode; 进行查询(如下) ?

5K30

Mysql学习笔记,持续记录

group by 子句中列出的每个都必须是检索或有效的表达式(但不能是聚集函数)。如果在 select 中使用表达式,则必须在 group by 子句中指定相同的表达式。不能使用别名。...除聚集计算语句外,select 语句中的每个都必须在 group by 子句中给出。 如果分组中具有 NULL 值,则 NULL 将作为一个分组返回。...SIMPLE 简单的select查询查询包含查询或者UNION PRIMARY 查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY SUBQUERY 在SELECT或WHERE列表包含查询...DERIVED 在FROM列表包含查询被标记为DERIVED(衍生),MySQL会递归执行这些查询,把结果放在临时表中 UNION 若第二个SELECT出现在UNION之后,则被标记为UNION...GROUP BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为不在GROUP BY从句中 STRICT_TRANS_TABLES:严格模式,在该模式下

1.2K50

MySQL 报错:5.7版本sql_mode=only_full_group_by问题

MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException...with sql_mode=only_full_group_by错误 解决方法 :执行SET GLOBAL sql_mode = ”; 把sql_mode 改成only_full_group_by模式...在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题 sql_mode常用值如下: ONLY_FULL_GROUP_BY: 对于GROUP...BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么这个SQL是不合法的,因为不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入。...如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysqlsql_mode设置如下: 在my.cnf添加如下配置 [mysqld] sql_mode=’ONLY_FULL_GROUP_BY

1.3K90

MySQL 报错:5.7版本sql_mode=only_full_group_by问题

MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException...with sql_mode=only_full_group_by错误 解决方法 :执行SET GLOBAL sql_mode = ”; 把sql_mode 改成only_full_group_by模式...在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题 sql_mode常用值如下: ONLY_FULL_GROUP_BY: 对于GROUP...BY聚合操作,如果在SELECT中的,没有在GROUP BY中出现,那么这个SQL是不合法的,因为不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入。...如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysqlsql_mode设置如下: 在my.cnf添加如下配置 [mysqld] sql_mode=’ONLY_FULL_GROUP_BY

1.6K30

MySQL出现SELECT list is not in GROUP BY clause and contains nonaggre的问题

with  sql_mode=only_full_group_by 问题出现的原因: MySQL 5.7.5及以上功能依赖检测功能。...如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表查询引用在GROUP BY子句中既未命名的集合,也不在功能上依赖于它们...(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)...解决方法一: 打开navcat, 用sql查询: select @@global.sql_mode 查询出来的值为: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES.../conf.d/mysql.cnf 滚动到文件底部复制并粘贴 [mysqld]  sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE

2.1K00

MySQL遇见SELECT list is not in GROUP BY clause and contains nonaggre的问题

this is incompatible with sql_mode=only_full_group_by > 时间: 0.081s 原因 MySQL5.7.5及以上版本有依赖检测功能。...如果启用了ONLY_FULL_GROUP_BY SQL模式(默认开启),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表查询引用在GROUP BY子句中既未命名的集合,也不在功能上依赖于它们...(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。)...解决方法 方法一 使用命令行或者数据库客户端执行SQL 1.SQL语句,select @@global.sql_mode查询 mysql> select @@global.sql_mode; +--...,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 方法二 vi修改MySQL配置文件my.cnf [mysqld] sql_mode=STRICT_TRANS_TABLES

2.4K30
领券