
# 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。
#### 改造建议
您可以参考以下两种改造方案：
1. 如果 GaussDB 的 GUC 参数中支持 sql_mode，可将 sql_mode 中的 ONLY_FULL_GROUP_BY 去除以支持该查询。
2. 修改该查询以及相关的业务，使其满足 SQL 标准关于分组查询的规范。
 
