问题

执行分组查询语句时遇到如下报错信息:

(1055, “Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘ex_3.message.message_id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by”)

原因

MySQL官方文档说明

小结

根据官网文档可以知道,在 ONLY_FULL_GROUP_BY 模式下:如果在 SelectHavingOrder By 这些语句中使用了未出现且不在功能上依赖(即由其唯一确定)在 Group By 语句的字段,那么将被视为非法的。
从MySQL 5.7.5开始,默认的SQL模式包括 ONLY_FULL_GROUP_BY 。 (在5.7.5之前,MySQL不会检测到功能依赖性,并且默认情况下未启用 ONLY_FULL_GROUP_BY
我用的是MySQL 8.0.19版本,也就是说默认采用了ONLY_FULL_GROUP_BY 模式,所以对我执行的语句产生了影响。

解决方法

打开MySQL安装目录下的my.ini配置文件,在 [mysqld] 一栏下加上如下内容

  1. # 设置模式
  2. sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

参考链接

https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_only_full_group_by
mysql使用group by分组时出现错误ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and