MySQL5.7 group by新特性报错1055的解决办法

MySQL 5.7版本中的GROUP BY语句发生了变化,在不加任何设置的情况下会默认开启ONLY_FULL_GROUP_BY模式。这种模式要求GROUP BY子句中出现的每个列,都必须在SELECT表达式中出现,或者是在聚合函数中使用。否则就会报1055错误,提示错误信息为“this is incompatible with sql_mode=only_full_group_by”。

如果你需要在MySQL5.7中使用GROUP BY子句但又遇到了1055错误,可以按照以下步骤,关闭ONLY_FULL_GROUP_BY模式。

步骤一:查看MySQL配置文件中是否存在sql_mode

在终端中输入以下命令:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

此命令会打开MySQL配置文件,如果你看到文件中有以下这行代码,则说明sql_mode已经被设置了。

sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

步骤二:注释掉sql_mode行

在上面命令打开的文件中,找到sql_mode这一行,并在最前面加上#注释掉,变成如下所示:

#sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

步骤三:保存文件并重新启动MySQL服务

保存文件并关闭编辑器,然后在终端中输入以下命令,重启MySQL服务。

sudo service mysql restart

完成上述步骤后,ONLY_FULL_GROUP_BY模式将被关闭。以下是两个示例。

示例一

假设我们有一张user表,其中共有4个字段:id、name、age、score。如果我们要查询每个年龄段的平均分数,则可以执行以下SQL语句:

SELECT age, AVG(score) 
FROM user 
GROUP BY age;

上述SQL语句在MySQL5.6及以下版本中可以正常执行,但是在MySQL5.7及以上版本中会报1055错误。此时,我们可以按照上述步骤关闭ONLY_FULL_GROUP_BY模式,或者修改SQL语句,将age字段也加入SELECT表达式中,如下所示:

SELECT age, AVG(score) 
FROM user 
GROUP BY age, name;

示例二

假设我们有一张orders表,其中共有4个字段:id、user_id、product_id、price。如果我们要统计每个用户的订单总金额,则可以执行以下SQL语句:

SELECT user_id, SUM(price) 
FROM orders 
GROUP BY user_id;

上述SQL语句在MySQL5.6及以下版本中可以正常执行,但是在MySQL5.7及以上版本中会报1055错误。此时,我们可以按照上述步骤关闭ONLY_FULL_GROUP_BY模式,或者修改SQL语句,将price字段也加入SELECT表达式中,如下所示:

SELECT user_id, SUM(price) as total_price 
FROM orders 
GROUP BY user_id, price;

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL5.7 group by新特性报错1055的解决办法 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 使用windows防火墙时报错0x80070422解决方案

    问题描述: 在使用Windows操作系统自带的防火墙时,可能会遇到如下错误提示信息: Error code: 0x80070422 这个错误是由于Windows Update服务被禁用引起的,从而导致无法打开Windows防火墙。 解决方案: 下面将介绍两种不同的解决方案,供您参考: 解决方案1:启用Windows Update服务 步骤1:按下”Win +…

    http 2023年5月13日
    00
  • vue脚手架安装以及安装失败问题解决办法

    接下来我将详细讲解“vue脚手架安装以及安装失败问题解决办法”的完整攻略,以下是具体步骤: 第一步:安装node.js 在使用vue脚手架之前,需要先安装node.js。可以到node官网下载安装包,根据自己的系统选择对应的版本,下载完成后安装即可。 第二步:全局安装vue脚手架 在安装完node.js后,使用npm命令安装vue脚手架。 打开终端或命令行窗…

    http 2023年5月13日
    00
  • @FeignClient path属性路径前缀带路径变量时报错的解决

    下面是详细的解释和示例。 问题描述 当使用@FeignClient注解时,如果在path属性中设置了路径前缀,且该前缀包含路径变量,则会出现如下错误: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient : LB returned null for service: xxx 这个…

    http 2023年5月13日
    00
  • Spring session redis 修改默认的序列化方法(案例)

    以下是Spring session redis修改默认的序列化方法的完整攻略: 简介 Spring Session是Spring官方提供的一个用于对Session进行管理的解决方案,可以将Session的数据存储在各种数据源中,其中就包括Redis。Spring Session Redis提供了一种默认的序列化方式,但是如果要修改默认的序列化方式,就需要进行…

    http 2023年5月13日
    00
  • IntelliJ IDEA报错Error:java: Compilation failed: internal java compiler error的解决办法

    IntelliJ IDEA报错Error:java: Compilation failed: internal javac compiler error的解决办法 在使用 IntelliJ IDEA 进行 Java 开发的过程中,有时会遇到这样的报错:Error:java: Compilation failed: internal javac compile…

    http 2023年5月13日
    00
  • Nginx的405 not allowed错误解决方法

    以下是关于“Nginx的405 not allowed错误解决方法”的完整攻略: 简介 在使用Nginx时,有时会出现405 not allowed错误,这个错误通常是由于请求方法不正确或者Nginx配置不当导致的。本文将介绍如何解决这个问题,并提供两个示例说明。 解决步骤 以下是解决Nginx的405 not allowed错误的步骤: 步一:检查请求方法…

    http 2023年5月13日
    00
  • Android webview加载https链接错误或无响应的解决

    以下是关于“Android WebView加载https链接错误或无响应的解决方法”的完整攻略: 简介 在Android应用中使用WebView加载https链接时,有时会出现错误无响应的情况。可能是由于证书问题、网络连接问题或WebView设置不当致的。本文将介绍如何解决个问题,并供两个示例说明。 解决步骤 以下是解决Android WebView加载ht…

    http 2023年5月13日
    00
  • HTTP请求超时的原因是什么?

    HTTP请求超时是指在一定时间内,客户端发送的请求未能获得服务器响应,导致请求失败。这种情况在网站访问频繁的情况下经常会发生。其主要原因包括以下几个方面: 网络连接问题:客户端和服务器之间的网络连接可能因为网络故障、防火墙、代理服务器等原因而影响请求响应时间。当客户端发送请求时,如果服务器不能及时响应,客户端会在超时时间内等待响应,如果等待时间过长,客户端会…

    云计算 2023年4月27日
    00
合作推广
合作推广
分享本页
返回顶部