2017-12-01 51 views
0

でGROUP_BYを修正しましたI次の表:プロジェクトActiveRecordのは、いくつかの集約

enter image description here

私は過去3年間に年間2017からプロジェクトを見つけるにしました。その後、status,elim,industryに基づいてフィルタリングされたプロジェクトでグループ化します。また、各年に基づいて合計金額を見つけるには、いくつかの集計が必要です。

私は次のことをしてしまいました。どのように私はそれを達成することができます

results["status"] => [ 
         "2017": ["Active": 1, "Successful": 1], 
         "2016": ["Inactive": 1], 
         "2015": ["Active": 1] 
        ] 

results["elim"] => [ 
         "2017": ["Death": 2], 
         "2016": ["Flood": 1], 
         "2015": ["Flood": 1] 
        ] 
results["amount"] => [ 
         "2017": 32000.0, 
         "2016": 19000.0, 
         "2015": 2000.0, 
        ] 

results = {} 
parameters = ['status', 'industry', 'elim'] 
@projects = Project.where("created_at >= ? AND created_at <= ?", 3.year.ago, DateTime.new(2017).end_of_year) 
parameters.each do |param| 
    results[param] = @projects.group_by{|p| [p.created_at.year]} 
end 

は基本的に、私は結果は以下のようになりたいですか?どんな手掛かり?

+0

"[" 2017 ":["死 ":2]" 2016 ":["洪水 ":1]" 2015 ":["洪水 ":1]]'は、 – Salil

+0

なぜですか?上記のテーブルイメージを注意深くチェックすると、大丈夫だと分かります – Emu

+0

rails/ruby​​ consoleに配列の上にペーストするだけで、あなたが知ることができます。 – Salil

答えて

0

を次のようにする必要があり、私はそれを少し変更して、期待される答えを得ました。

parameters.each do |param| 
    results[param] = @projects.group_by{|p| p.created_at.year} 
    results[param].each do |key, values| 
    results[param][key] = values.group_by{|p| p.status} # changed here 
    end 
end 

ありがとうございました。あなたの答えは(+1)です。しかし、それは私が推測するとかなり高価です。どんな良いアイデア?

1

parameters.each do |param| 
    results[param] = @projects.group_by{|p| p.created_at.year} 
    results[param].each do |key, values| 
    results[param][key] = values.each_with_object(Hash.new(0)) { |v, counts| counts[v.send(param)] += 1 } 
    end 
end 

次試してみてください結果は、サリルのコード@の助けを借りて

results["status"] => { 
         "2017": {"Active": 1, "Successful": 1}, 
         "2016": {"Inactive": 1}, 
         "2015": {"Active": 1} 
        } 
+0

実際には、パラメータは 'status'ではなく、group_by – Emu

+0

にする必要があるので、基本的に' results ["elim"] 'が必要な場合は、ループのために再度実行する必要があります。 – Emu

+0

あなたは今得ている結果を投稿できますか? – Salil

関連する問題