In aggregated query without GROUP BY, expression #1 of SELECT list contains



起源

        最近发下很多人在我的python课程下面提问,关于执行python 定时器Job会报错 如下

In aggregated query without GROUP BY, expression #1 of SELECT list contains

出现原因

        在MySQL5.7.5后,默认开启了ONLY_FULL_GROUP_BY,所以导致了之前的一些SQL无法正常执行,其实,是我们的SQL不规范造成的,因为group by 之后,返回的一些数据是不确定的,所以才会出现这个错误。

解决方案

        我们知道了原因,就可以去找到对应的解决方法,主要都是修改sql_mode

方案一

        直接修改 /etc/my.cnf ,找到sql-mode的位置,去掉ONLY_FULL_GROUP_BY,然后需要重启mysql 服务,大致如下就可以了

[mysqld]
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO

方案二

        这种方法可以不用重启mysql服务,但是服务重启之后设置就没有用了,适合临时解决治标不治本。这种方法修改会话变量。主要操作如下(在mysql命令行执行)

#第一步 查看目前sql_mode 的配置,可以看到值中有 only_full_group_by 
show variables like '%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';


大家根据自己的情况选择适合自己的方法解决问题

mysql
编程浪子走四方:CodeRonin