2014-01-15 27 views
1

假設我有一個Users表,並且每個用戶都有一個country_id(國家列表存儲在另一個表中)。獲取每個國家的居民人數

我想顯示每個國家的列表,有多少成員有,即:

Canada: 16 
Romania: 12 
USA: 9 

我用一些原始SQL,但此舉對Postgres的是凌亂的,所以我想使用更清潔的實施。有沒有一個很好的'高手'的方式去獲得所說的名單?

+0

請分享你已經嘗試了什麼,與表模式 – Cris

+0

ActiveRecord的方法組和計數一起應該是所有你需要在這裏。 –

+0

我所擁有的東西相當複雜(可能過於複雜),所以我想從這裏開始。我確定這是一種相對常見的查詢類型,所以我想要任何和所有的建議!您可以想象,表架構只是一個帶有ID,名稱和country_id列的用戶表,以及具有ID和名稱的國家/地區表。 – opticon

回答

5

這將返回一個哈希與country_id => count雙:

@users_by_country = User.group(:country_id).count 
#=> { 1 => 104, 2 => 63, ... } 

生成的SQL查詢看起來是這樣的:

SELECT COUNT(*) AS count_all, country_id AS country_id FROM `users` GROUP BY country_id 

而在你的看法:

<% @countries.each do |country| %> 
    <%= country.name %>: <%= @users_by_country[country.id] %> 
<% end> 
2

雖然你有沒有提供任何細節。所以它很難回答exaclty,但可能這將有助於

User.group(:country_id).count 
+1

絕對是。 @斯特凡毆打你一分鐘,所以我必須給他支票,但你會得到讚揚和永恆的感激之情! – opticon

0

如果你有一個國家模型,你想以不同的方式做到這一點,所以它更可讀,你可以使用.MAP。

Countries.map {| o | {國家:o.name,成員:o.members.count}}

顯然你需要有關聯。如果國家只是用戶的一個領域,那麼這是行不通的。

BR