首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PostgreSQL:列必须出现在GROUP子句中或在聚合函数中使用

PostgreSQL:列必须出现在GROUP子句中或在聚合函数中使用
EN

Stack Overflow用户
提问于 2016-12-30 01:16:03
回答 2查看 3.1K关注 0票数 0

我在使用PostgreSQL的PHP应用程序上遇到了问题。我有一个简单的SQL语句,如下所示:

代码语言:javascript
运行
复制
select count(*) as aggregate from "categories" where "promoter_id" = ? order by "sort_order" asc

但是,它会触发以下错误:

SQLSTATE42803:分组错误:7错误:列"categories.sort_order“必须出现在GROUP by子句中,或者在聚合函数行1:...om”类别“中使用,其中"promoter_id”= $1顺序由“sort_orde.^”(promoter_id:从“类别”中选择计数(*)作为聚合,其中"promoter_id“=7顺序按"sort_order”

sort_order列包含用于“排序”记录的任意无符号整数。

上述声明是由雄辩者(Laravel‘so )发布的,似乎只是在用WHERE子句计算表中的记录,那么为什么会触发这个错误呢?我不想对sort order列进行分组,以防出现重复的值(即两个sort_order值为2的记录),但这似乎是解决方案,错误消息是建议。

有没有其他的解决办法?我对PostgreSQL非常陌生,所以这似乎是我到目前为止还没有面对过MySQL的一个特点。

EN

回答 2

Stack Overflow用户

发布于 2016-12-30 01:23:35

这是您的查询:

代码语言:javascript
运行
复制
select count(*) as aggregate
from "categories"
where "promoter_id" = ?
order by "sort_order" asc;

order by在做什么?当结果集有一行时,为什么还要去排序呢?别管它了。

发生错误的具体原因是列sort_order不在结果集中,因此Postgres无法解决它。MySQL在处理聚合的方式上要灵活得多(而且不正确),因此它允许在任何其他数据库中导致错误的构造(例如这个order by)。

票数 5
EN

Stack Overflow用户

发布于 2017-11-16 16:15:26

如果您不能删除ORDER,那么可以添加一个额外的文字字段吗?

代码语言:javascript
运行
复制
SELECT count(*) AS aggregate, 0 AS sort_order
FROM "categories"
WHERE "promoter_id" = ?
ORDER BY "sort_order" asc;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41389373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档