mysql 5.7 GROUP BY问题
Mysql5.7使用ONLY_FULL_GROUP_BY检查GROUP BY的合法性,新的语法认为:如果GROUP BY的字段在SELECT中没有,则认为不合法,Mysql直接报错。如:
SELECT id from table GROUP BY id //合法 SELECT name from table GROUP BY id //报错
个人认为这种写法很坑,GROUP BY是根据某个字段聚合,SELECT 是提取的字段。但Mysql认为这样很可能会导致数据不一致,(以上第二条用id分组,但用的是未分组的name)
一般两种解决办法:
1:使用 any_value 函数
2:修改配置:
进入mysql控制台输入命令
mysql> select @@GLOBAL.sql_mode;
高亮图片就是ONLY_FULL_GROUP_BY,把这一行复制下来,去掉ONLY_FULL_GROUP_BY,复制到my.cnf下,比如我这里是:
#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,一些介绍方法是sql_mode=STRICT_TRANS_TABLES……,set是在控制台输入命令,只对当前有效,一旦重启mysql则失效。
设置完之后重启即可