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

SQLite可用的GROUP BY查询在PostgreSQL中执行报错求助

问题原因

PostgreSQL严格遵循ANSI SQL标准,要求SELECT子句里的非聚合函数列必须要么出现在GROUP BY子句中,要么被聚合函数(比如MAX()、MIN())包裹。而SQLite默认启用了宽松模式,允许这种“不严谨”的写法——它会自动选取分组内的任意值返回,但这其实存在逻辑风险(比如如果同一cards.did对应多个不同的decks.id/name,结果会不可预测)。

你的查询里,decks.id和decks.name既不在GROUP BY里,也没被聚合函数处理,所以PostgreSQL直接触发报错。

解决方案

因为decks.id = cards.did,每个cards.did分组对应的decks.id和decks.name应该是唯一的(假设decks.id是表主键),所以只需要把这两个列加入GROUP BY即可:

SELECT decks.id, decks.name, count(cards.id) 
FROM decks 
JOIN cards ON decks.id = cards.did 
GROUP BY decks.id, decks.name;

如果decks.id是decks表的主键,PostgreSQL还支持更简洁的写法(利用主键唯一性,只需GROUP BY主键,其他依赖列可省略):

SELECT decks.id, decks.name, count(cards.id) 
FROM decks 
JOIN cards ON decks.id = cards.did 
GROUP BY decks.id;

这两种写法都符合PostgreSQL的标准要求,同时能保证结果逻辑正确。

内容的提问来源于stack exchange,提问作者Ranjith kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:01:17