簡體   English   中英

Rails Postgres GROUP所有列

[英]Rails Postgres GROUP all columns

您必須在Postgres中選擇的所有列都按GROUP BY ,否則它會惹惱您。 除了列出所有列之外,是否有簡單/干凈的方法來執行此操作?

我想出的最好的是以下內容(意圖已注釋):

# 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

查找擁有最多帳戶的用戶的一種方法:

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])

注意 :即使多個用戶擁有最多數量的相同帳戶數,也只能找到一個用戶。

足夠的時間過去了,我不得不說,不幸的是,對於我所問的具體問題,沒有更好的解決方案。 也許Rails 5會有所幫助,我稍后會再討論。 我在該問題中的基本解決方案適用於我的用法,無需進行大量工作即可進行分組就可以對其進行修改或用於其他更高級別的方法中。

這也可以通過更新Postgres適配器來解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM