2011-08-17 87 views
1

我不知道爲什麼,這是行不通的:Postgres的聚集問題

SELECT u.id, u.tag, u.unit_type, Count(p.id) AS num_points 
FROM ot2.unit u 
INNER JOIN ot2.point p on p.unit_id = u.id 
GROUP BY u.id 
HAVING Count(p.id) > 800; 

ERROR: column "u.tag" must appear in the GROUP BY clause or be used in an aggregate function SQL state: 42803

我已經被提供了一個列組。

+2

這不會在所有RDBMS [除MySQL的]工作(http://mysql.lamphost.net/tech-resources/articles/debunking-group-by-myths的.html)。錯誤消息告訴你所有你需要知道的!它不要求「一列」。它會告訴你需要的確切額外的一個。你還需要理清'u.unit_type' –

回答

2

正是錯誤所說的。 u.tag不在組中,你不會告訴如何將不同的u.tag值聚合到一個單獨的值。

更具體的,你有兩個選擇:

  • 添加u.tag的group by子句(和u.unit_type以及)
  • 使用這些2場的聚合函數(最小值,最大值, SUM,AVG,....)
+0

爲什麼?這不會解釋錯誤信息的重述。 –

+0

按照定義:如果你有一個group by statement,那麼select列表中的每個字段必須在group by statement中命名,或者必須有一個聚合函數。在這種情況下,u.id在組中,並且(p.id)具有聚合函數count()。 u.tag和u.unit_type都不在。 – Eddy