【问题标题】:ERROR: column "engagements.id" must appear in the GROUP BY clause or be used in an aggregate function错误:列“engagements.id”必须出现在 GROUP BY 子句中或在聚合函数中使用
【发布时间】:2016-09-16 12:15:20
【问题描述】:

我有以下有效的查询

@engagements = Engagement.includes(:participation).where(influencer_authorization_id: current_influencer.id).group_by { |p| p.status }

我正在尝试使用数据库函数而不是 Ruby/Rails 函数进行分组,以下是我的代码

engagements = Engagement.where(influencer_authorization_id: current_influencer.id).group("status")

但我收到以下错误

错误:列“engagements.id”必须出现在 GROUP BY 子句中或用于聚合函数中 第 1 行:选择“参与度”。* 从“参与度”中选择“参与度... ^

更新

我尝试了以下操作,但仍然无法正常工作

engagements = Engagement.select("engagements.*").where(influencer_authorization_id: current_influencer.id).group("engagement.status")

错误

错误:表“参与”缺少 FROM 子句条目 第 1 行:...ents"."influencer_authorization_id" = $1 GROUP BY 参与度... ^

【问题讨论】:

  • Enumerable#group_by 与 SQL 的 GROUP BY 非常不同。 group_by 或多或少用于构建元素相对于块相同的数组。 GROUP BY 用于对行进行分组,以便可以将聚合函数(例如 countmax、...)应用于每个组。

标签: ruby-on-rails ruby postgresql ruby-on-rails-4


【解决方案1】:

你使用 postgres 吗? 问题是数据库无法决定要显示什么,例如当多个记录的“状态”相同时,“id”列。您可以手动编写选择语句并使用聚合函数。 我认为这个PostgreSQL -must appear in the GROUP BY clause or be used in an aggregate function 和这个GroupingError: ERROR: column must appear in the GROUP BY clause or be used in an aggregate function 是相关的

【讨论】:

  • 我试过了,但仍然出现错误。已更新问题
  • @HarshaMV 应该是 group("engagements.status") 而不是 group("engagement.status")。另外,如果这不起作用,请分享查询的 .to_sql 输出
猜你喜欢
  • 1970-01-01
  • 2014-12-26
  • 2014-01-23
  • 2020-06-11
  • 2020-11-04
  • 2015-06-22
  • 1970-01-01
  • 2018-05-16
相关资源
最近更新 更多