28763


rails初心者です。  
以下のようなタレント(talent)の人気を登録するテーブル(popularitys)があったとします  
select * from popularitys;

id | user_id | talent_id |  
ーーーーーーーーーーーー  
| 1 | 1 | 1 |  
| 2 | 3 | 1 |  
| 3 | 5 | 1 |  
| 4 | 2 | 2 |  
| 5 | 7 | 4 |  
| 6 | 9 | 2 |  
| 7 | 8 | 3 |  
| 8 | 6 | 4 |

テーブル内(popularitys)のtalent_idのid毎に合算(sum)しソートして以下のように表示結果を出したいと思ってます

1位 talent_id: 1 sum= 3  
2位 talent_id: 2 sum= 2  
2位 talent_id: 4 sum= 2  
3位 talent_id: 4 sum= 2  
4位 talent_id: 3 sum= 1

アドバイス頂けましたら幸いです。  
何卒宜しくお願い致します。

※特定のidをカウントすることはできました。  
Popularity.where(talent_id: 1).count  
=> 3


CC BY-SA 3.0
2016-09-08T08:19:04.097
28762
2016-09-08T09:40:12.923
18575
question
ruby-on-rails rails-activerecord
rails テーブルのレコードをid毎合算して集計する→ランキングとして表示

[code]

    Popularity.group(:talent_id).order('count_talent_id desc').count(:talent_id)
    
[/code]

これで`talent_id`ごとの`count`が求まると思うので、適切に表示したい結果に加工すればよいと思います。

参考：

  * [ActiveRecordでgroup byしてカウントをして、カウント数でorderする - 酒と泪とRubyとRailsと](http://morizyun.github.io/blog/count-order-active-record-rails/)
  * [ruby on rails - "Order by" result of "group by" count? - Stack Overflow](https://stackoverflow.com/questions/7131109/order-by-result-of-group-by-count)


CC BY-SA 3.0
2016-09-08T09:19:45.803
28763
2016-09-08T09:40:12.923
2017-05-23T12:38:56.467
-1
9008
28762
answer