解决在 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
问题分析
出现这个问题一般一下问题导致的
- mysql 8.0 及以上版本
- sql_mode 启用了 only_full_group_by
- 查询字段中或者排序字段中出现了不存在 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
切换 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