报错信息
: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'hmdp.area.area_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
中文意思
:SELECT列表的表达式#2不在GROUP BY子句中,并且包含非聚合列“hmdp.area.area_name”,该列在功能上不依赖于GROUP BY子句的列;这与sqlmode=onlyfull_groupby不兼容
原因
这个错误是由于MySQL的"sql_mode"设置为"only_full_group_by"引起的。"only_full_group_by"模式要求在GROUP BY子句中,除了聚合函数外,所有的SELECT列都必须在GROUP BY子句中出现。
解决方案
为了解决这个问题,有几种方法可以尝试:
- 重新设计查询:可以将非聚合列的值合并到聚合列中,或者使用聚合函数来处理非聚合列的值。
- 使用ANY_VALUE函数:如果你确定非聚合列的值在每个组中是唯一的,可以使用ANY_VALUE函数来解决问题。ANY_VALUE函数将返回每个组中的任意一个值,并且不受"only_full_group_by"模式的限制。
SELECT group_column, ANY_VALUE(sum_column) AS total_sum FROM my_table GROUP BY group_column;
- 修改sql_mode设置:如果你不想使用"only_full_group_by"模式,可以修改MySQL的"sql_mode"设置。
可以通过以下方式修改:
- 打开MySQL配置文件(通常是my.cnf或my.ini文件)。
- 找到"sql_mode"相关的设置。
- 修改"sql_mode"值,移除"only_full_group_by"模式。例如,可以将"sql_mode"设置为:
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
- 保存并重新启动MySQL服务。
请注意,修改"sql_mode"可能对其他查询和应用程序产生影响。确保在更改设置之前做好充分的测试。
本人最后采取第二种方案解决问题。
根据自己的需求和数据,选择适合的方法来解决问题。
标签:full,GROUP,数据库,only,报错,mode,sql,group From: https://www.cnblogs.com/galo/p/17723947.html