私はAlbums
のテーブルを持っていて、release_date
という名前のdate
カラムを持っています。月単位+年単位の集計
その月/年にリリースされたアルバムの数とともに、現在のすべての月+年の組み合わせのリストを取得したいと考えています。 4
- 2016年11月:
ので、出力は次のようになるかもしれませんRuby 2.3.1、Rails 5、Postgres 9.6、FWIW。
私はAlbums
のテーブルを持っていて、release_date
という名前のdate
カラムを持っています。月単位+年単位の集計
その月/年にリリースされたアルバムの数とともに、現在のすべての月+年の組み合わせのリストを取得したいと考えています。 4
ので、出力は次のようになるかもしれませんRuby 2.3.1、Rails 5、Postgres 9.6、FWIW。
私はあなたのテーブルが単線であると仮定しています。Album
Railsの規約に従います。そうでない場合は、変更を検討してください。
Album.all.map { |album| [Date::MONTHNAMES[album.date.month], album.date.year].join(' ') }
.each_with_object(Hash.new(0)) { |month_year, counts| counts[month_year] += 1 }
説明:
.map
方法アルバムを反復し、["month year", "month year", ... ]
からなる文字列の配列を返します。
.each_with_object
メソッドは、ユニークな配列アイテムごとにカウントを持つハッシュを返す標準カウントアルゴリズムです。
データベース層は、このタスクが属するところである、ないルビー:
Album.group("TO_CHAR(release_date, 'Month YYYY')").count
データベース層を使用したのはなぜ?単に他のものに比べて雷が速いので、資源効率が良い特にとRubyに比べると、それは完全に縮尺されており、Album
トンの記録があるため、単純にメモリをオーバーロードして処理を完了することはできません。
それはSQL使用して非常に簡単です:1でアルバムグループから(*)カウント、 '選択to_char関数(RELEASE_DATE、「月YYYYを」);' – Abelisto
受け入れ理由を、効率的に何が必要達成するための方法や説明のための私の答えを参照してください答えはこれのために悪い道具を使います –