質問: 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
回答: ``` Popularity.group(:talent_id).order('count_talent_id desc').count(:talent_id) ``` これで`talent_id`ごとの`count`が求まると思うので、適切に表示したい結果に加工すればよいと思います。 参考: * ActiveRecordでgroup byしてカウントをして、カウント数でorderする - 酒と泪とRubyとRailsと * ruby on rails - "Order by" result of "group by" count? - Stack Overflow