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';
大家根据自己的情况选择适合自己的方法解决问题