2016-05-19 53 views
0

我有工作错误:列“engagements.id”必须出现在GROUP BY子句或聚合函数中使用

@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") 

但我收到以下错误

ERROR: column "engagements.id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT "engagements".* FROM "engagements" WHERE "engagements... ^

更新

我试着做以下,但仍不起作用

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

错误

ERROR: missing FROM-clause entry for table "engagement" LINE 1: ...ents"."influencer_authorization_id" = $1 GROUP BY engagement... ^

+0

'Enumerable#group_by'与SQL的'GROUP BY'有很大不同。 'group_by'或多或少用于构建数组元素与块相同的数组。 “GROUP BY”用于对行进行分组,以便可以将聚合函数(例如'count','max',...)应用于每个组。 –

回答

1

你使用Postgres的? 问题是数据库无法决定如何显示例如当'status'对于多个记录是相同的'id'列。您可以手动编写select语句并使用聚合函数。 我觉得这个PostgreSQL -must appear in the GROUP BY clause or be used in an aggregate functionGroupingError: ERROR: column must appear in the GROUP BY clause or be used in an aggregate function有关

+0

是的,我正在使用PostgreSQL。将检查出来 –

+0

我试过了,但仍然出现错误。已更新问题 –

+0

@HarshaMV应该是组(“engagements.status”)而不是组(“engagement.status”)。 此外,如果这将无法正常工作,请分享.to_sql输出的查询 – Leaf

相关问题