ActionView :: Template :: Error(PG ::错误:错误:列“recipes.id”必须出现在GROUP BY子句中或用于聚合函数

时间:2012-12-15 00:54:37

标签: postgresql heroku

我无法使用此方法与heroku一起工作,在尝试加载页面时,我收到上述错误消息。我在之前的帖子中得到了一些帮助,但似乎重新分解并没有奏效。从我所读到的,我需要在搜索和组中包括模型的所有列。这是正确的吗?方法和架构如下

方法

def self.popular_recipes
  select('recipes.*, count(*) AS dish_count').
  group('dish_name').
  order('dish_count DESC')
 end

模式

create_table "recipes", :force => true do |t|
t.string   "dish_name"
t.string   "difficulty"
t.text     "preperation_time"
t.datetime "created_at",          :null => false
t.datetime "updated_at",          :null => false
t.integer  "user_id"
t.string   "avatar_file_name"
t.string   "avatar_content_type"
t.integer  "avatar_file_size"
t.datetime "avatar_updated_at"
t.integer  "country_id"
t.string   "category"
t.text     "description"
end

1 个答案:

答案 0 :(得分:1)

问题是你选择的recipes.*混淆了PostgreSQL。

假设您在recipes表中有10个唯一的dish_names,其中包含500条记录。 GROUP BY dish_name子句将导致仅返回10行。所以,如果你要求recipes.*,Postgres如何知道如何填写10行的其他列?

请改为:

def self.popular_recipes
  select('dish_name, count(*) AS dish_count').
  group('dish_name').
  order('dish_count DESC')
 end

请注意,MySQL在这种情况下表现不同(没有错误),并且会为每个dish_name返回一行,但是哪一行基本上是未定义的。