在编写Group By时遇到MYSQL报错:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '******' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
其根本原因是开启了ONLY_FULL_GROUP_BY, 作用是对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,所以对于设置了这个mode的数据库,在使用group by 的时候,就要用MAX(),SUM(),ANT_VALUE()这种聚合函数,才能完成GROUP BY 的聚合操作。
基于此,可以通过关闭
ONLY_FULL_GROUP_BY或者修改Group By查询语句来解决这个错误。
使用navicat修改配置:
进入命令行界面(F6),然后输入:
SELECT @@GLOBAL.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 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 ';
重启Mysql,再运行SQL看看吧~
但是从根本上面而言,我个人还是不建议在编写Group By聚合时,没有在Select列中出现,所以我还是比较倾向于修改SQL语句。
文章评论