1 报错信息
2 报错原因
因为在MySQL 5.7后,MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。如果代码中含有group by聚合操作,那么select中的列,除了使用聚合函数之外的,如max()、min()等,都必须出现在group by中
3 解决办法
解决办法一
1 打开数据库输入以下命令:
select @@global.sql_mode;
会获得如下信息:
如果里面包含 ONLY_FULL_GROUP_BY,那么就重新设置,在数据库中输入以下代码,去掉ONLY_FULL_GROUP_BY即可:
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
如果使用图形化工具编写的sql,可能需要重新启动图形化工具
解决办法二
修改配置文件my.ini
在[mysqld]模块下新增一行配置:
sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
解决办法三
使用 any_value() 或 group_concat()
1. any_value():将分到同一组的数据里第一条数据的指定列值作为返回数据。 (any_value()函数就是MySQL提供的用来抑制ONLY_FULL_GROUP_BY值被拒绝的),示例展示:
select Beijing,any_value(Shanghai) from city group by Beijing
2. group_concat():将分到同一组的数据默认用逗号隔开作为返回数据,示例展示:
select Beijing,group_concat(Shanghai) from city group by Beijing
参考连接:
MySQL报错:sql_mode=only_full_group_by 4种解决方法含举例,轻松解决ONLY_FULL_GROUP_BY的报错问题-CSDN博客