大家好,我是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
执行期间;
检索结果如下:
结语
🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~