你必须GROUP BY
你在Postgres中选择的所有列,否则它会生你的气。除了列出所有列之外,还有一种简单/干净的方法吗?
我提出的最好的是以下(意图被评论):
# The purpose of this query is to return a list of `User`s
# ordered by the number of `Account`s they have in descending order.
User.joins(:accounts)
.group(User.full_column_names)
.order('COUNT("accounts".*) DESC')
来自user.rb
:
def self.full_column_names
column_names.collect {|name| "\"#{table_name}\".\"#{name}\"" }
end
答案 0 :(得分:0)
查找帐户最多的用户的一种方法:
user_id, number_of_accounts = Account.group(:user_id).count.max_by{ |key, value| value}
user_with_most_accounts = User.find(user_id)
使用以下内容进行一次查询:
user_with_most_accounts = User.find(Account.group(:user_id).count.max_by{ |key, value| value}[0])
注意:即使多个用户的帐号数量与计数最多,也只会找到一个用户。
答案 1 :(得分:0)
已经过了足够的时间我不得不说,遗憾的是,对于我提出的具体问题,没有更好的解决方案。也许Rails 5会有一些东西,我稍后会再次访问它。我在问题中的基本解决方案适用于我的使用,可以修改或在另一个更高级别的方法中使用,而无需执行分组。
这也可以在对Postgres适配器的更新中解决。