GROUP BY失效问题:SQL查询报错#1055的原因排查
解决MySQL GROUP BY报错#1055的问题
嘿,这个问题我之前踩过同款坑,咱们好好唠明白~
错误核心原因
你碰到的#1055错误,根源是MySQL默认开启了ONLY_FULL_GROUP_BY这个SQL模式。这个模式的规则相当严格:SELECT列表里的每一列,要么出现在GROUP BY子句中,要么被聚合函数(比如MAX()、MIN()、COUNT()这类)包裹。
你写的SELECT * FROM posts GROUP BY article_id,SELECT *会返回posts表的所有列(id、name、article_id),但GROUP BY只指定了article_id。对于同一article_id下的多条帖子,MySQL根本不知道该返回哪一条的id和name值——总不能随便挑一条糊弄吧?所以它直接抛出了错误。
结合你的需求修正SQL
看你的描述,你实际需求是获取所有posts数据并按article_id排序,这完全不需要用GROUP BY啊!GROUP BY是用来做分组统计(比如统计每个文章下有多少帖子)的,而你要的是全量帖子按article_id排序,直接用ORDER BY就够了:
SELECT * FROM posts ORDER BY article_id;
如果你的真实需求其实是每个文章只取一条关联的帖子(比如最新发布的那一条),那才需要用到GROUP BY配合聚合函数或者窗口函数。举两个实用的例子:
方法1:子查询+聚合函数(兼容低版本MySQL)
SELECT * FROM posts WHERE id IN ( SELECT MAX(id) FROM posts GROUP BY article_id );
方法2:窗口函数(MySQL 8.0及以上版本支持)
SELECT id, name, article_id FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY article_id ORDER BY id DESC) AS rn FROM posts ) t WHERE rn = 1;
内容的提问来源于stack exchange,提问作者wenus
相关产品推荐
相关产品推荐

