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

使用sql_mode=only_full_group_by的MySQL中的Group By错误

在使用sql_mode=only_full_group_by的MySQL中,Group By错误是指在执行Group By语句时,出现了不符合SQL标准的情况,导致查询结果不准确或报错。

概念: Group By是SQL语句中的一个子句,用于将数据按照指定的列进行分组,并对每个分组进行聚合操作,例如计算总和、平均值等。而sql_mode=only_full_group_by是MySQL的一个严格模式,要求在使用Group By时,必须将所有非聚合列都包含在Group By子句中。

分类: Group By错误可以分为两类:

  1. 非聚合列未包含在Group By子句中:即在Group By语句中没有将所有非聚合列都包含进去。
  2. 非聚合列与聚合函数混用:即在Select语句中既使用了聚合函数,又使用了未包含在Group By子句中的非聚合列。

优势: 使用sql_mode=only_full_group_by可以确保查询结果的准确性,避免了在Group By操作中出现数据混乱或错误的情况。

应用场景: Group By错误的应用场景包括但不限于:

  1. 在进行数据统计和分析时,需要按照某些列进行分组,并对每个分组进行聚合操作。
  2. 在生成报表或统计图表时,需要按照某些列进行分组,以展示数据的分布情况。

推荐的腾讯云相关产品和产品介绍链接地址: 腾讯云提供了多个与MySQL相关的产品和服务,可以帮助用户解决Group By错误的问题,例如:

  1. 云数据库 MySQL:腾讯云提供的一种高性能、可扩展的云数据库服务,支持MySQL数据库,可以通过控制台或API进行管理和配置。详情请参考:https://cloud.tencent.com/product/cdb
  2. 云数据库 TencentDB for MySQL:腾讯云提供的一种高可用、可扩展的云数据库服务,支持MySQL数据库,具备自动备份、容灾、监控等功能。详情请参考:https://cloud.tencent.com/product/tcdb-mysql
  3. 云数据库 MariaDB:腾讯云提供的一种高性能、可扩展的云数据库服务,支持MariaDB数据库,可以通过控制台或API进行管理和配置。详情请参考:https://cloud.tencent.com/product/cdb-mariadb

以上是关于使用sql_mode=only_full_group_by的MySQL中的Group By错误的完善且全面的答案。

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

相关·内容

MySQL-this is incompatible with sql_mode=only_full_group_by错误解决方法

一、原理层面        这个错误发生在mysql 5.7 版本及以上版本会出现问题:        mysql 5.7版本默认sql配置是:sql_mode="ONLY_FULL_GROUP_BY...,就是group by后面跟着字段。...由于开启了ONLY_FULL_GROUP_BY设置,所以如果一个字段没有在target list和group by字段同时出现,或者是聚合函数值的话,那么这条sql查询是被mysql认为非法,会报错误...三、查看sql_mode语句如下 select @@GLOBAL.sql_mode; 四、解决方案 1.永久修改,需修改mysql配置文件,通过手动添加sql_mode方式强制指定不需要ONLY_FULL_GROUP_BY...2.临时性修改sql_mode,但是重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现。

9K30

MySQL5.7 中使用 group by 报错 this is incompatible with sql_mode=only_full_group_by

报错场景 ---- 在sql语句中使用 group by 报错 SELECT FROM `user` GROUP BY `gender`; SQLSTATE[42000]: Syntax error...incompatible with sql_mode=only_full_group_by" 2....问题分析 ---- 一、原理层面 这个错误发生在mysql 5.7 版本及以上版本,5.7版本默认sql_mode配置包含 ONLY_FULL_GROUP_BY,这个配置严格执行了”SQL92标准”...由于开启了ONLY_FULL_GROUP_BY设置,所以如果一个字段没有在target list 和 group by 字段同时出现,或者是聚合函数值的话,那么这条sql查询是被mysql认为非法...查看sql模式 ---- 查看 sql_mode 语句 show global variables like 'sql_mode'; 通过命令行可以看到 sql_mode 值有一堆,将最前面的 ONLY_FULL_GROUP_BY

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

    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; 进行查询(如下) ?.../etc/my.cnf 将下面红字加入到[mysqld]sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO

    5K30

    mysql5.7.5版本sql_mode=only_full_group_by问题

    mysql5.7.5版本默认设置了sql_mode=only_full_group_by,造成了之前使用sql语句有些会出现sql_mode=only_full_group_by错误,接下来为解决此类问题方法...1. sql解决(但是不是永久) 查看sql_mode(select @@sql_mode) 去掉ONLY_FULL_GROUP_BY,重新设置值。...,NO_ENGINE_SUBSTITUTION'; ) 对于已存在数据库,则需要在对应数据下执行(set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...修改my.cnf文件(永久) 找到mysqlmy.cnf文件,linux中找到/etc/my.cnf 找到sql_mode修改为( sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ) 如果没有在最下方添上( sql_mode

    38540

    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.4K90

    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.7K30

    小白学习MySQL - only_full_group_by校验规则

    by字段不同SQL在Oracle跑一定是报错,提示如下,即要求在select非聚合列必须出现在group by子句中,为什么在MySQL中就可以执行?...这里要提到一个参数就是sql_mode,他存储MySQL应该支持SQL语法,对数据校验等,一些常见值,如下所示, (1) ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,...在MySQL 5.7以上,sql_mode参数值是默认包含这个only_full_group_by校验规则,但是在5.7以下,不包含此规则,如上SQL,就是跑在5.5, show variables...this is incompatible with sql_mode=only_full_group_by 我们删除sql_modeonly_full_group_by, set session...子句中未包含非聚合列SQL,就需要写SQL同学能保证select和group by一致性,否则执行SQL很可能得到就是错误结果集,从MySQL 5.7开始就默认支持校验规则only_full_group_by

    42430

    MySQL only_full_group_by 1055 报错三种解决方案,临时关闭有影响吗?

    当我们迁移到 MySQL 5.7+ 版本时,常会碰到 ERROR 1055 only_full_group_by 错误,这是 5.7 之后 SQL_MODE 默认打开了严格模式导致错误。...讲 ONLY_FULL_GROUP_BY 错误前,我们先来说一下 SQL_MODE。理解 MySQL 工作原理能更好帮你理解错误发生本质原因。...ONLY_FULL_GROUP_BY 是 SQL_MODE TRADITIONAL 选项参数,从 5.7 开始默认开启为严格模式。...、NO_AUTO_CREATE_USER 我们直接在 MySQL 配置文件更改,或者临时全部关闭: SET GLOBAL sql_mode=''; 或者单关闭 ONLY_FULL_GROUP_BY MariaDB...[ONLY_FULL_GROUP_BY 使用聚合函数] MySQL 还提供了 ANY_VALUE() 函数,来解决这类问题: [ONLY_FULL_GROUP_BY 使用 any value] 总结和推荐

    5.6K60

    mysql sql-mode 解析和设置

    sql_mode:简而言之就是:它定义了你MySQL应该支持sql语法,对数据校验等等 select @@sql_mode:使用该命令我们可以查看我们当前数据库sql_mode mysql> select...各个值含义: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT列,没有在GROUP BY中出现,那么将认为这个SQL是不合法,因为列不在GROUP BY...从句中 因为有only_full_group_by,所以我们要在MySQL中正确使用group by语句的话,只能是select column1 from tb1 group by column1(即只能展示...set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 可以使用该语句来将空格替换掉only_full_group_by,...这样我们就可以使用 mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); Query OK, 0 rows

    1.6K20

    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...:使用这个就是使用和oracle一样group 规则, select列都要在group,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多...,所以去掉就好 方法一: 查询mysql 1055错误码发现问题为在mysql配置如果设置了sql_mode包含ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select字段都包含在...但是查看自己配置my.cnf发现在sql_mode并没有ONLY_FULL_GROUP_BY这个值 然后去查看Laravel配置文件,config/database.php,查找mysql配置,...关闭正在运行mysql 2. 修改/etc/my.cnf,将sql_mode=only_full_group_by给删掉 3.

    1.4K40

    【黄啊码】MySQL:Syntax error or access violation: 1055 Expression #1 of SELECT list is not ...

    错误原因: MySQL 5.7.5及以上版本实现了对功能依赖检测。...如果启用了only_full_group_by SQL模式(在默认情况下是这样),那么MySQL就会拒绝选择列表、条件或顺序列表引用查询,这些查询将引用组未命名非聚合列,而不是在功能上依赖于它们。...,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION only_full_group_by说明: only_full_group_by :使用这个就是使用和oracle...一样group 规则, select列都要在group,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多,所以去掉就好 官网摘抄:... ONLY_FULL_GROUP_BY 但很多网友说直接修改mysql配置文件,在my.ini加上sql_mode=即可 [mysqld] sql_mode= 黄啊码也亲自尝试过,确实可以!

    50430

    sql_modeonly_full_group_by

    后面我了解了一下情况,大概情况就是他们写了一个sql,使用group by,然后group by里面的字段只有一个,但是select语句中查询了多个字段,导致MySQL报了类似下面的错误: ERROR...with sql_mode=only_full_group_by 大概就是说这个select语句中字段了group by字段不一致,这在MySQL是不被允许。...group by三个字段,那么这个结果是可靠,没有报错误,而且是按照group by最近一个字段age来进行分组,再来看单独使用id情况以及使用id和score情况: mysql--dba_admin...经过我们上面这么多实验,可以得到下面的结论: 1、当我们sql_mode使用only_full_group_by时候,如果要想实现select字段和group by字段数量不相同而查询语句不出错...2、当我们去掉sql_modeonly_full_group_by时候,之所以前后字段数量不一致还能查询成功,实际上是mysql为我们进行了补齐。

    3.7K31

    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...:使用这个就是使用和oracle一样group 规则, select列都要在group,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多...,所以去掉就好 方法一: 查询mysql 1055错误码发现问题为在mysql配置如果设置了sql_mode包含ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select字段都包含在...即 select x,y from xxx group by x,y 否则就会报错 但是查看自己配置my.cnf发现在sql_mode并没有ONLY_FULL_GROUP_BY这个值 然后去查看...关闭正在运行mysql 2. 修改/etc/my.cnf,将sql_mode=only_full_group_by给删掉 3.

    1.1K30

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

    ONLY_FULL_GROUP_BY设定,将不允许查询字段包括非聚集列 查询mysql服务器版本:以下命令在终端或者navicat输入执行均可。...默认: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 方法一: 查询mysql 1055错误码发现问题为在mysql配置如果设置了sql_mode包含ONLY_FULL_GROUP_BY...关闭正在运行mysql 2. 修改/etc/my.cnf,将sql_mode=only_full_group_by给删掉 3....推荐使用更改my.cnf方法更改sql_mode,以防止后续重启mysql服务或者服务器配置失效。...sql_mode常用值: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT列,没有在GROUP BY中出现,那么这个SQL是不合法,因为列不在GROUP BY

    41450
    领券