h365info's blog

http://h365.info というアダルトサイトの管理人のブログ

Rails で group by して count を取りたい時のイディオム

Rails4 で group by して count を取りたい時にこんなふうに書けます。

本に対してレビューが書かれていて、本ごとのレビュー件数を取りたい場合は

Review.group(:book_id).order('count_all desc').count

こんなふうに書くと

(0.3ms) SELECT COUNT(*) AS count_all, book_id AS book_id FROM `reviews` GROUP BY book_id ORDER BY count_all desc
=> {588=>5, 589=>2, 590=>1, 591=>0, 592=>4, 593=>3}

みたいな結果になります。{ book_id => count } のハッシュが返ってきます。

そういうメモ。