【问题标题】:column "users.id" must appear in the GROUP BY clause or be used in an aggregate function列“users.id”必须出现在 GROUP BY 子句中或在聚合函数中使用
【发布时间】:2013-04-24 04:58:51
【问题描述】:

关系:

Item belongs to Product
Product belongs to User

物品型号范围:

  scope :search, ->(search_term) {
    select('products.name, users.*, products.brand, COUNT(products.id)')
    .joins(:product => :user)
    .where('users.name = ? OR products.brand = ?', search_term, search_term)
    .group('products.id')
  }

上面的结果如下SQL语句:

SELECT products.name, users.*, products.brand, COUNT(products.id) FROM "items" 
INNER JOIN "products" ON "products"."id" = "items"."product_id" 
INNER JOIN "users" ON "users"."id" = "products"."user_id" 
WHERE (users.name = 'Atsuete Lipstick' OR products.brand = 'Atsuete Lipstick') 
GROUP BY products.id

这里的问题是出现了错误:

ActiveRecord::StatementInvalid: PG::Error: ERROR:  column "users.id" 
must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT products.name, users.*, products.brand, COUNT(product...

有什么办法可以解决这个问题?

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord


    【解决方案1】:

    从错误中你可以看出你应该尝试在GROUP BY 子句中包含users.id

     .group('products.id, users.id')
    

    【讨论】:

    • 那组记录不会有相同的user.id吗?
    • @alexBrand,我的问题是 Obazee 先生。
    • 是的,这个答案没有意义。如果按 users.id 分组,则与不分组相同。
    • 为我工作,谢谢!我只需要更改为:.group('products.id', 'users.id')
    猜你喜欢
    • 2018-05-16
    • 2013-11-05
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多