解决MySQL 5.8.x版本sql_mode=only_full_group_by问题,this is incompatible with sql_mode=only_full_group_by错误

项目场景:今天用DBeaver运行这个sql脚本出错

脚本:

use case1;
select t1.author_id ,t1.live_id	,coalesce (sum(t2.watch_duration)/t1.live_duration,0) as acu
from t1
left join t2 
on (t1.live_id = t2.live_id)
group by t1.author_id ,t1.live_id;

问题描述:sql_mode=only_full_group_by

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'case1.t1.live_duration' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因分析:mysql8.x版本默认开启only_full_group_by

上官网查了下对于sql_mode=only_full_group_by的解释如下:在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的,only_full_group_by就表示你group by的字段必须和select后的字段完全匹配才行(聚合函数除外)


解决方案:关掉就行了

办法1:
将查询到的sql_mode中ONLY_FULL_GROUP_BY删去即可,重启就会失效

set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

办法2:
先找到自己mysql安装路径

select @@basedir;

然后进入文件夹找到自己的my.ini配置文件,修改[mysqld]中的内容,添加下面的内容就可以
在这里插入图片描述
一定要加在[mysqld]里面,就是下面这行代码,就是将查询到的sql_mode中ONLY_FULL_GROUP_BY删去

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

然后退出数据库,在服务里面重启MySQL就可以
重启也很关键!!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值