问题
执行分组查询语句时遇到如下报错信息:
(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
模式下:如果在 Select
、 Having
、 Order 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]
一栏下加上如下内容
# 设置模式
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