我在使用PostgreSQL的PHP应用程序上遇到了问题。我有一个简单的SQL语句,如下所示:
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的一个特点。
发布于 2016-12-30 01:23:35
这是您的查询:
select count(*) as aggregate
from "categories"
where "promoter_id" = ?
order by "sort_order" asc;order by在做什么?当结果集有一行时,为什么还要去排序呢?别管它了。
发生错误的具体原因是列sort_order不在结果集中,因此Postgres无法解决它。MySQL在处理聚合的方式上要灵活得多(而且不正确),因此它允许在任何其他数据库中导致错误的构造(例如这个order by)。
https://stackoverflow.com/questions/41389373
复制相似问题