MySQL-Aggregated query without GROUP BY

复现

1
2
Error querying database.  
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: In aggregated query without GROUP BY,expression #1 of SELECT list contains nonaggregated column 'db.table.column; this is incompatible with sql_mode=only_full_group_by

原因

MySQL 5.7.5 之后,默认设置 ONLY_FULL_GROUP_BY 参数为打开状态,因此会导致很多 sql 会出现问题,而上述出现的就是其中的一种。

归根到底还是 sql 的不规范造成的,因为在使用 GROUP BY 之后,返回的一些数据是不确定的,所以才会出现这个异常。


解决方案

  1. 修改 sql
    • 使用 ANY_VALUE(table.column) 函数来抑制 ONLY_FULL_GROUP_BY 值被拒绝,原因在于 ANY_VALUE() 函数会选择被分到同一组的数据里第一条数据的指定列值作为返回数据。
    • sql 之后使用 GROUP BY 来保证 table.column 唯一有值。
  2. 修改 MysQL 的参数配置
    • 首先登录 MySQL ,查看对应的配置信息 show variables like '%sql_mode'; 。接下来就可以编辑 my.cnf 文件,找到 sql-mode 的位置,去掉其中的 ONLY_FULL_GROUP_BY ,然后重启 MySQL 。最后在重启 MySQL 后,查看对应的配置信息 show variables like '%sql_mode'; 是否修改成功。

引用

修改 sql 关于如何使用 GROUP BY


个人备注

此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!