【发布时间】:2011-03-30 00:18:28
【问题描述】:
我有这个在 MySQL 中可以正常工作的查询。更多背景知识here。
SELECT c.*, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
WHERE c.id = i.category_id
AND i.id = v.voteable_id
AND v.created_at > '#{1.week.ago}'
GROUP BY c.id
ORDER BY score DESC LIMIT 8;
我尝试在 PostgreSQL 中运行它,但失败并显示此错误消息。
PGError:错误:列“c.name”必须 出现在 GROUP BY 子句中或被 在聚合函数中使用
我不确定这是什么意思,所以我尝试在 group by 子句中将“c.id”更改为“c.name”(两者在 MySQL 中的工作方式相同,假设项目的名称是唯一的)。
然而这又产生了另一个类似的错误
PGError:错误:列“c.id”必须 出现在 GROUP BY 子句中或被 在聚合函数中使用
如何解决这个问题?
【问题讨论】:
-
奇怪的是,现在 Postgre 9.1 似乎允许这样做
-
它在 Postgre 9.2 中被删除了吗?出于同样的原因,我收到此错误。
-
@Aaron:它没有被删除,但仅在(引用documentation)时起作用:未分组的列在功能上依赖于分组的列,否则可能会有多个为未分组的列返回的值。如果分组列(或其子集)是包含未分组列的表的主键,则存在函数依赖关系
标签: mysql sql postgresql