文档首页/
数据库和应用迁移 UGO/
用户指南/
语法转换指南/
转换错误码/
MySQL To GaussDB 转换错误码/
U0400037:GaussDB 默认不支持 SELECT 查询中包含不在 GROUP BY 子句中的非聚合列
更新时间:2025-06-04 GMT+08:00
U0400037:GaussDB 默认不支持 SELECT 查询中包含不在 GROUP BY 子句中的非聚合列
描述
数据库类型与版本
- 源库类型与版本:MySQL 5.5、5.6、5.7、8.0 版本。
- 目标库类型与版本:GaussDB 所有版本。
语法示例
GROUP BY 子句将查询结果按某一列或多列的值分组,值相等的为一组。此时如果 SELECT 列表的表达式中引用了那些没有分组的字段,则会报错,除非使用了聚集函数,因为对于未分组的字段,可能返回多个数值,查询结果是不确定的。如下示例所示:
SELECT id, code FROM test_code group by code;
在省略 GROUP BY 子句而使用聚合函数时,整个查询结果集将被当成一个大的分组,此时如果 SELECT 列表中同时出现聚合函数和普通列将会报错,如下示例所示:
SELECT max(id), code FROM test_code;
当 MySQL 的 sql_mode 中不包含 ONLY_FULL_GROUP_BY 时,则支持上述所示的两种查询,但是需要注意的是此时不在 GROUP BY 子句中的非聚合列的查询结果也是不确定的,MySQL 5.7 版本后,sql_mode 中默认添加了 ONLY_FULL_GROUP_BY。
改造建议
您可以参考以下两种改造方案:
- 如果 GaussDB 的 GUC 参数中支持 sql_mode,可将 sql_mode 中的 ONLY_FULL_GROUP_BY 去除以支持该查询。
- 修改该查询以及相关的业务,使其满足 SQL 标准关于分组查询的规范。