MySQL执行SQL报错1140:无GROUP BY聚合查询含非聚合列如何解决
报错引发原因
该错误是MySQL开启ONLY_FULL_GROUP_BY SQL模式后的强制校验触发的,规则要求:
- 只要查询中使用了
COUNT()/SUM()/MAX()这类聚合函数,如果没有添加GROUP BY子句,整个查询的所有结果会被聚合为1行返回,此时SELECT列表中只能出现被聚合函数包裹的字段,不允许存在普通的非聚合字段。 - 你提交的SQL中,SELECT列表同时包含了
vp.visitor_id、vp.name、vp.email三个普通非聚合字段,以及count(n.notification_id)聚合字段,且未添加GROUP BY指定分组规则,数据库无法判断多份用户数据的统计结果要如何合并展示,因此抛出1140错误。
修复方法
如果你的需求是统计每个符合条件的用户的0状态通知数量,只需要在WHERE条件后增加GROUP BY子句,把SELECT列表里的非聚合字段都加入分组规则即可:
SELECT vp.visitor_id , vp.name ,vp.email ,count(n.notification_id) from visitor_profile vp join notification n on n.receiver_id = vp.visitor_id where n.status = 0 and vp.visitor_id in (66578,66579) GROUP BY vp.visitor_id, vp.name, vp.email;
如果visitor_id是visitor_profile表的主键,仅写GROUP BY vp.visitor_id也可以正常执行,主键可唯一确定同一行的其他字段值。
内容的提问来源于stack exchange,提问作者jibin james
相关产品推荐
相关产品推荐

