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日

相关文章

  • spring cloud feign不支持@RequestBody+ RequestMethod.GET报错的解决方法

    以下是关于“springcloudfeign不支持@RequestBody+RequestMethod.GET报错的解决方法”的完整攻略: 问题描述 在使用Spring Cloud Feign进行服务调用,如果使用@RequestBody注解和RequestMethod.GET请求方法可能会遇到不支持的错误。本文将详细介绍这个问题的解决方法。 解决步骤 以下…

    http 2023年5月13日
    00
  • 详解Androidstudio3.0 关于Gradle报错的问题(小结)

    详解Androidstudio3.0关于Gradle报错的问题(小结) 近年来,Android开发越来越成为众多IT从业者的首选,其中Androidstudio更是成为最流行的IDE之一。然而,在开发中常常会遇到Gradle相关的问题,下面我将详细讲解如何解决这些问题。 Gradle是什么 Gradle是一个基于Apache Ant和Apache Maven…

    http 2023年5月13日
    00
  • Mybatis执行SQL时多了一个limit的问题及解决方法

    Mybatis执行SQL时多了一个limit的问题即指在使用Mybatis框架时,执行SQL语句时会多出一个limit关键字,这可能会导致SQL语句不能正常执行或查询结果不正确。下面给出具体的解决方法。 常见原因 多出一个limit关键字主要是由于使用了分页插件(比如Mybatis PageHelper插件),这些分页插件会在执行SQL语句时自动添加limi…

    http 2023年5月13日
    00
  • HTTP的跨域问题是什么?如何解决?

    HTTP跨域问题指的是当浏览器使用XMLHttpRequest对象发送跨域请求时,因为安全限制而无法成功获取响应结果的问题。跨域指的是浏览器中页面的地址和请求的地址处于不同域名、不同端口、不同协议的情况。 解决HTTP跨域问题的方法 解决HTTP跨域问题的方式很多,下面介绍几种常用的方法: JSONP解决跨域问题 JSONP(JSON with Paddin…

    Http网络协议 2023年4月20日
    00
  • Maven中Could not find artifact XXXX的错误解决

    当我们在使用Maven构建项目时,有时会遇到“Could not find artifact XXXX”的错误。这个错误通常是由于Maven无法找到所需的依赖项而引起的。以下是解决这个问题的完整攻略: 步骤1:检查Maven配置 首先,我们需要检查Maven的配置是否正确。我们可以检查以下几个方面: 检查Maven的settings.xml文件是否正确配置了…

    http 2023年5月13日
    00
  • Vue3刷新页面报错404的解决方法

    Vue3刷新页面报错404的解决方法 在Vue3中,当我们刷新页面时,可能会遇到404错误。这是因为Vue3使用了history模式,而浏览器在刷新页面时会向服务器发送请求,服务器并没有相应的路由配置。以下是Vue3刷新页面报错404的解决方法的完整攻略: 配置服务器:首先,我们需要在服务器上配置路由。我们需要将所有的路由请求都指向index文件。例如,在N…

    http 2023年5月13日
    00
  • Tomcat 与 maven 的安装与使用教程

    以下是 Tomcat 与 Maven 的安装与使用教程,以及两条示例说明。 安装 Tomcat 获取安装包并解压: wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.22/bin/apache-tomcat-9.0.22.tar.gz tar -xzvf apache-…

    http 2023年5月13日
    00
  • 如何解决HTTP重定向异常问题?

    HTTP重定向异常问题常常发生在使用HTTP协议访问网站时,可能会遇到无法访问目标网页的情况,而此时会出现HTTP响应码为3XX(重定向)的情况。这时候我们需要通过解决HTTP重定向异常问题才能够正常地访问目标网站。以下是解决HTTP重定向异常问题的攻略: 1. 确认目标网站的HTTP重定向状态 HTTP重定向状态是指目标网站是否支持HTTP重定向,通常情况…

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