SQL三表LEFT JOIN分组查询选择state_name触发GROUP BY子句报错如何解决
问题解决方案
报错原因
你遇到的8120错误是SQL标准的分组查询约束导致的:所有出现在SELECT子句中、未被聚合函数包裹的字段,必须同时包含在GROUP BY子句中。你之前的查询仅按s.code_state分组,在SELECT中新增s.state_name后没有同步更新分组条件,因此触发报错。
调整后的完整SQL
SELECT s.state_name, COUNT(u.code_branch) AS total_user FROM states s LEFT JOIN branches b ON s.code_state = b.code_state LEFT JOIN users u ON u.code_branch = b.code_branch GROUP BY s.code_state, s.state_name ORDER BY s.code_state;
调整说明
- 补全了原SQL中第二个LEFT JOIN缺失的
ON关键字,修复了语法隐患 - 在GROUP BY子句中新增
s.state_name字段:由于states表中code_state和state_name是一一对应的映射关系,新增该字段到分组条件不会改变统计逻辑,最终用户数的统计结果和你之前得到的正确数值完全一致 - 统计字段别名调整为
total_user,和你预期的输出字段名匹配
内容的提问来源于stack exchange,提问作者ezles88
相关产品推荐
相关产品推荐

