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

MySQL使用SELECT、COUNT、GROUP BY统计报错#1055问题求助

解决MySQL中GROUP BY的1055错误问题

这个报错的核心原因是MySQL启用了only_full_group_by严格模式,而你的SQL语句违反了这个模式的规则:SELECT列表里的非聚合列date既没有出现在GROUP BY子句中,也和GROUP BY的列DAY(date)没有功能依赖关系,所以触发了1055错误。MariaDB默认没有开启这个严格模式,因此可以正常执行。

下面给你两种可行的解决方案:

方案1:调整SQL语句,符合only_full_group_by规则

既然你是按天统计,我们可以对date列使用聚合函数(比如MIN()或MAX()),这样SELECT的列就属于聚合结果,符合模式要求。同时注意:排序应该用ORDER BY,GROUP BY后面不需要加ASC(这是语法错误,MariaDB可能忽略了这个问题)。修改后的SQL如下:

SELECT MIN(date) AS date, COUNT(id_master_post) 
FROM master_post 
GROUP BY DAY(date) 
ORDER BY DAY(date) ASC;

这里MIN(date)会返回当天的最早日期,你也可以根据需求换成MAX(date)获取当天最晚日期。

方案2:关闭only_full_group_by模式

如果你想保留原来的SQL写法,可以临时或永久关闭这个严格模式:

临时生效(重启MySQL后失效)

执行以下SQL语句:

SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

永久生效(需要修改配置文件)

找到MySQL的配置文件(Linux下通常是/etc/my.cnf或/etc/mysql/my.cnf,Windows下是my.ini),找到sql_mode配置项,移除其中的ONLY_FULL_GROUP_BY,示例配置如下:

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

修改后重启MySQL服务即可生效。

内容的提问来源于stack exchange,提问作者AniSong Lyrics

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:37:15