Live2D

数据库报错

报错信息

: 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子句中出现。

 

解决方案

为了解决这个问题,有几种方法可以尝试:

  1. 重新设计查询:可以将非聚合列的值合并到聚合列中,或者使用聚合函数来处理非聚合列的值。
  2. 使用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;
  1. 修改sql_mode设置:如果你不想使用"only_full_group_by"模式,可以修改MySQL的"sql_mode"设置。

可以通过以下方式修改:

    1. 打开MySQL配置文件(通常是my.cnf或my.ini文件)。
    2. 找到"sql_mode"相关的设置。
    3. 修改"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"
    1. 保存并重新启动MySQL服务。

请注意,修改"sql_mode"可能对其他查询和应用程序产生影响。确保在更改设置之前做好充分的测试。

 

本人最后采取第二种方案解决问题。

根据自己的需求和数据,选择适合的方法来解决问题。

posted @ 2023-09-23 10:05  都是朕的江山  阅读(47)  评论(0)    收藏  举报
返回顶端