You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL报错Error Code 1055与sql_mode=only_full_group_by不兼容如何修复?

报错原因

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ebe.Co.ContactName' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这个报错是MySQL的only_full_group_by校验规则触发的,规则要求:SELECT列表中所有没有用聚合函数包裹的字段,必须全部包含在GROUP BY子句中。你当前的代码只按E.ClientID分组,但是SELECT里的C.ClientName、CO.ContactName、CO.ContactPhone、CO.ContactEmail都属于非聚合字段,也没有加入GROUP BY,所以触发报错。


修改方案

你可以根据自己的统计需求二选一:

方案1:按【客户+对应联系人】维度统计(逻辑更严谨,推荐使用)

如果你的统计目标是每个客户的每个联系人对应的事件总数,直接把所有非聚合字段加入GROUP BY即可:

USE EBE;

SELECT C.ClientName, CO.ContactName, CO.ContactPhone, CO.ContactEmail,
  COUNT(E.EventCode) AS NumberOfEvents
FROM Client AS C 
INNER JOIN Contact AS CO ON C.ClientID = CO.ClientID 
INNER JOIN Events AS E ON C.ClientID = E.ClientID
GROUP BY C.ClientName, CO.ContactName, CO.ContactPhone, CO.ContactEmail
ORDER BY C.ClientName;

如果Client表中ClientID和ClientName是一一对应关系、Contact表中ContactID和三个联系人字段是一一对应关系,也可以简化GROUP BY为GROUP BY C.ClientID, CO.ContactID,前提是这两个ID是对应表的主键。

方案2:仅按客户维度统计,联系人信息取任意一条

如果你只需要统计每个客户的事件总数,同一个客户的多个联系人信息随便取一条即可,可以对联系人字段用ANY_VALUE()函数包裹,规避校验:

USE EBE;

SELECT C.ClientName, ANY_VALUE(CO.ContactName) AS ContactName, ANY_VALUE(CO.ContactPhone) AS ContactPhone, ANY_VALUE(CO.ContactEmail) AS ContactEmail,
  COUNT(E.EventCode) AS NumberOfEvents
FROM Client AS C 
INNER JOIN Contact AS CO ON C.ClientID = CO.ClientID 
INNER JOIN Events AS E ON C.ClientID = E.ClientID
GROUP BY C.ClientID, C.ClientName
ORDER BY C.ClientName;

内容的提问来源于stack exchange,提问作者Go_Gators

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:04