PostgreSQL:Column必须出现在GROUP BY子句中,或者用在聚合函数中

Mar*_*ean 0 postgresql

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

select count(*) as aggregate from "categories" where "promoter_id" = ? order by "sort_order" asc
Run Code Online (Sandbox Code Playgroud)

但它会触发以下错误:

SQLSTATE [42803]:分组错误:7错误:列"categories.sort_order"必须出现在GROUP BY子句中或用于聚合函数LINE 1:... om"categories"其中"promoter_id"= $ 1 order by" sort_orde ... ^(SQL:从"categories"中选择count(*)作为聚合,其中"promoter_id"= 7 order by"sort_order"asc)

sort_order列包含用于"排序"记录的任意无符号整数.

上述语句由Eloquent(Laravel的ORM)发布,似乎只是计算带有WHERE子句的表中的记录,那为什么会触发此错误?我真的不想将sort order列分组以防有重复值(即两个sort_order值为的记录2),但这似乎是错误消息建议的解决方案.

有替代解决方案吗?我对PostgreSQL很陌生,所以这似乎是我迄今为止没有遇到MySQL的特点.

Gor*_*off 5

这是您的查询:

select count(*) as aggregate
from "categories"
where "promoter_id" = ?
order by "sort_order" asc;
Run Code Online (Sandbox Code Playgroud)

什么是order by做什么?当结果集有一行时,为什么还要打扰排序.把它留下来吧.

发生错误的具体原因是因为列sort_order不在结果集中,因此Postgres无法解析它.MySQL对于如何处理聚合更加灵活(并且不正确),因此它允许order by在任何其他数据库中导致错误的构造(例如此).