解决在 mysql 中使用 group by 无效报错 SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'xxxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
1677640050

问题分析

 出现这个问题一般一下问题导致的

  1. mysql 8.0 及以上版本
  2. sql_mode 启用了 only_full_group_by
  3. 查询字段中或者排序字段中出现了不存在 group by 的字段

解决方案

select 中使用 ANY_VALUE 聚合函数

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
  • 官方解读
此函数对于ONLY_FULL_GROUP_BY SQL 模式下的查询很有用 已启用,适用于 MySQL 拒绝您知道的查询的情况 由于 MySQL 无法确定的原因而有效。函数 返回值和类型与返回值和 其参数的类型,但未检查函数结果 对于ONLY_FULL_GROUP_BY SQL 模式。GROUP BY
例如,如果 是非索引 列中,以下查询失败并启用ONLY_FULL_GROUP_BY:name

1677640592

切换 sql_mode 模式

  • 通过临时 sql 临时生效
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
  • 通过 my.cnf 配置永久生效

 linux下修改mysql的my.cnf配置文件

vi /etc/my.cnf

1677640945