在MySQL5.7.5之前,使用group by分组时,附带查询任何字段都可以
MySQL5.7.5后,only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效,通俗的说,除了使用聚合函数,和查询group by分组的字段外,再加其它字段,就会报错:
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
这是由于group by分组后,再查其它字段时,若有不重复或其它情况,MySQL不知道应该返回哪个算正确,于是在MySQL5.7.5之后加上了这种限制
准备来说没有什么标不标准,语法是固定的,但谋事也在人,我们只能说MySQL这样做,使得它返回的数据更加严谨了
若还想在使用group by分组的情况下,查询到其它字段,总结三个方法:
1、修改配置文件my.cnf,找到:ONLY_FULL_GROUP_BY
# 设置模式
sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
2、要查询的字段,同样使用group by排序,优先级靠后
3、通过any_value函数实现,例如下面这条语句
SELECT any_value(id)id, any_value(name)name, SUM(score) FROM `as_answer` GROUP BY uid LIMIT 0 , 30