mysql报错:IN AGGREGATED QUERY WITHOUT GROUP BY, EXPRESSION #2 OF SELECT LIST CONTAINS NONAGGREGATED

  • Post author:
  • Post category:mysql



原因



1.这种模式的官方解释:ONLY_FULL_GROUP_BY是MySQL数据库提供的一个sql_mode, 通过这个 sql_mode 来保证, SQL语句 “分组求最值” 合法性的检查. 这种模式采用了与 Oracle、DB2 等数据库的处理方式。即不允许 select target list 中出现语义不明确的列.

2.对于用到 GROUP BY 的 select 语句, 查出来的列必须是 group by 后面声明的列, 或者是聚合函数里面的列有这样一个数据库的表.


该模式特点



1:只要有聚合函数 sum(),count(),max(),avg() 等函数就需要用到 group by , 否则就会报上面的错误.

2:group by id (id 是主键) 的时候, select 什么都没有问题, 包括有聚合函数.

3:group by role (非主键) 的时候, select 只能是聚合函数和 role ( group by 的字段) , 否则报错


解决办法



临时关闭该模式,一旦重启mysql就会失效。

set @@GLOBAL.sql_mode='';
set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';



版权声明:本文为mudooo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。