【问题标题】:Postgres aggregate problemPostgres 聚合问题
【发布时间】:2011-08-17 23:21:06
【问题描述】:

我不确定为什么这不起作用:

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;

错误:列“u.tag”必须出现在 GROUP BY 子句中或在聚合函数中使用 SQL 状态:42803

我已经为 group by 提供了一个列。

【问题讨论】:

  • 这不适用于所有 RDBMS except MySQL。错误信息告诉你所有你需要知道的!它不要求“列”。它会告诉您您需要的确切附加信息。您还需要整理u.unit_type

标签: sql postgresql


【解决方案1】:

正是错误所说的。 u.tag 不在 group by 中,您也没有告诉如何将不同的 u.tag 值聚合为一个值。

更具体地说,您有 2 个选项:

  • 在 group by 子句中添加 u.tag(以及 u.unit_type)
  • 在这 2 个字段(最小值、最大值、总和、平均值、...)上使用聚合函数

【讨论】:

  • 为什么?这解释了错误消息的重述。
  • 根据定义:如果您有一个 group by 语句,则选择列表中的每个字段要么必须在 group by 语句中命名,要么必须具有聚合函数。在这种情况下,u.id 在 group by 中,并且 (p.id) 有一个聚合函数 count()。 u.tag 和 u.unit_type 都不在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2021-11-03
  • 1970-01-01
  • 2018-07-15
  • 2015-12-26
  • 1970-01-01
相关资源
最近更新 更多