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 @   都是朕的江山  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-09-23 Linux网关失效
返回顶端
点击右上角即可分享
微信分享提示