使用ActiveRecord和Postgres进行分组

4
我看到了几个答案,但没有找到能帮助我的内容。
我有一个模型,其中包含一个“country”列和一个“city”列。
在进行一些SQL查询时,我想要将一个按国家分组的查询添加到该查询中,并且对于每个国家,再按城市进行分组。
Model.where("name LIKE ?", "%#{query}%").group(["country", "city"])

但我遇到问题。
PG::GroupingError: ERROR:  column "models.id" must appear in the GROUP BY clause or be used in an aggregate function

我不确定该怎么做,因为我不想按ID分组,只想按国家和城市分组

我确定我错过了什么,但不确定是什么

使用建议的字段

 Model.where("name LIKE ?", "%#{query}%").group("country, city").select("country, city")

仍然出现相同的错误


错误提示 - 告诉你该怎么做。尝试使用以下代码:Model.where("name LIKE ?", "%#{query}%").group("country, city").select("name, city")。当你使用 group by 时,在任何数据库中,你必须在 select 子句中使用你在 group by 子句中使用的列。 - Arup Rakshit
即使我执行 Model.where("name LIKE ?", "%#{query}%").group(["country", "city"]).select("id"),我仍然得到相同的错误。 - Nick Ginanto
仍然会出现相同的错误。 - Nick Ginanto
你的最终查询和错误是什么?请更新你的问题并提供我所要求的信息。 - Arup Rakshit
尝试使用 select,然后是 where,最后是 group,例如:Model.select('country, city').where(... - vee
显示剩余2条评论
2个回答

4
您应该在分组之前进行选择。
Model.where("name LIKE ?", "%#{query}%")
     .select("country, city")
     .group("country, city")

0

如果您还遇到以下问题:

Model.where("name LIKE ?", "%#{query}%").group("country, city").select("country, city")

我猜你已经定义了一个默认作用域,你必须这样做:

Model.unscoped.where("name LIKE ?", "%#{query}%").group("country, city").select("country, city")

编辑:

如果它没有起作用,你可以这样做并发布输出:

Model.where("name LIKE ?", "%#{query}%").group(["country", "city"]).to_sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接