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

SELECT字段未在GROUP BY中报错原因咨询(sql_mode=only_full_group_by)

关于only_full_group_by模式下GROUP BY的报错原因

问题场景

执行一条包含JOIN和GROUP BY的SQL查询时触发报错,报错信息如下:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ipay_app.sp.code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原查询语句:

select sp.code,count(sps.sp_key) 
from service_providers sp
left join service_providers_sub sps
on sp.code = sps.sp_key
group by sps.sp_key; 

将sp.code添加到GROUP BY子句后查询正常得到结果,以下是报错原因的说明:

报错核心原因

MySQL的only_full_group_by是严格SQL规范的强制要求,它规定SELECT列表里的所有非聚合字段必须满足两个条件之一:

  • 直接出现在GROUP BY子句中,作为分组的依据
  • 在功能上依赖于GROUP BY里的字段(比如是分组字段的主键/唯一键,能被分组字段唯一确定)

回到你的查询:
GROUP BY的是sps.sp_key,但SELECT里的sp.code既不在GROUP BY里,也无法被sps.sp_key唯一确定——因为是左连接,一个sps.sp_key可能对应多个sp.code(或者当sps里无匹配数据时,sps.sp_key为NULL,对应多个sp.code),数据库无法确定该返回哪一个sp.code值,因此直接抛出报错。

解决逻辑验证

当你把sp.code加入GROUP BY后,分组依据变成sps.sp_key+sp.code,此时SELECT里的sp.code属于分组字段,完全符合only_full_group_by的要求,数据库能明确每个分组对应的sp.code值,因此可以正常执行查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:30:59