【解决方案】MySQL报错 SELECT list is not in GROUP BY clause and contains nonaggregated column

大家好,我是DX3906

🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘大前端领域、真诚分享知识与智慧的小天地!🎇

问题背景

     我今天在写mysql的时候,遇到一个报错:

 select 执行期间,组织,销售区域,部门,sum(申请活动数) 申请活动数 from linkers GROUP BY 执行期间;

    报错里明显写着:this is incompatible with sql_mode=only_full_group_by

     在MySQL数据库的5.7版本及以上,默认启用了ONLY_FULL_GROUP_BY模式,这个模式对GROUP BY语句的使用提出了更严格的要求。简单来说,如果在使用GROUP BY时,选择列表、HAVING条件或ORDER BY子句中包含了不在GROUP BY子句中的列,那么这样的查询将不再被允许。这是因为在ONLY_FULL_GROUP_BY模式下,数据库期望查询结果中的每个非聚合列都必须明确地在GROUP BY子句中指定,以确保查询结果的一致性和准确性。如果违反了这一规则,查询将会失败并报错。

 具体实践

     不是所有的SELECT xx,xx检索的列,必须在GROUP BY中也同时存在。

     如下sql也能正常执行(该sql包含聚集函数)

select 执行期间,sum(申请活动数) 申请活动数 from linkers GROUP BY 执行期间;

解决方案 

  修改sql_mode(查询出所有的sql_mode
select @@global.sql_mode;

移除ONLY_FULL_GROUP_BY

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

然后再执行以下sql:

SELECT
 执行期间,
 销售区域,部门,
 sum(申请活动数) 申请活动数
FROM
 linkers 
GROUP BY
 执行期间;

 检索结果如下:

 

结语

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~ 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻找DX3906

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值