我在使用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的特点.
这是您的查询:
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在任何其他数据库中导致错误的构造(例如此).
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |