设为首页 加入收藏

TOP

MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题
2019-09-23 11:15:25 】 浏览:28
Tags:MySQL 排错 解决 聚合 包含 GROUP 问题

排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题

By:授客 QQ1033553122

 

测试环境

win10

MySQL 5.7

 

问题描述:

执行类似以下mysql查询,

SELECT id, name, count(*) AS cnt FROM case_table GROUP BY name

报错,如下:

服务器内部错误 (1055, "Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'case_table.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by")

 

原因:存在非聚合列 id ,没有包含在GROUP BY子句中。

 

但是本例中,其它地方需要用到这个id列,不能去掉,那咋办呢?如下

 

解决方法

方法1

查询全局sql_mode

SELECT @@GLOBAL.sql_mode;

或者

SELECT @@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';
SET SESSION
 

 

 

复制查询结果,然后设置GLOBAL sql_mode,SESSION sql_model为查询结果去掉 “ONLY_FULL_GROUP_BY,”的值,如下:

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

注意:该方法仅用于临时修改,重启mysql后,以上设置失效。

 

方法2

启动mysql时,增加sql_model选项,如下:

mysqld --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" [...其它选项]

 

方法3:

linux服务下,修改my.conf (Windows下修改my.ini),在[mysqld]节点下,最末尾添加sql_mode配置,如下:

...

[mysqld]

...

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

[其它节点配置]

...

 

 

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL数据库day20190922 下一篇MongoDB初始化创建管理员账户登录

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目