首页 > 技术分享 > MySQL
收藏

mysql使用group by查询报错SELECT list is not in GROUP BY clause...解决方案

11/27 14:14
大潇博客 原创文章,转载请标明出处

在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


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311