[英]Ruby SQL Result to Grouped Hash
我正在通过使用PHP的自写API从专有数据库(Sybase Advantage ADS)中获取数据,并将结果作为JSON返回
所以我有一个看起来像这样的结果
[
{"year"=>"2016", "month"=>"1", "total"=>"1223"},
{"year"=>"2016", "month"=>"2", "total"=>"613"},
{"year"=>"2016", "month"=>"3", "total"=>"12351"},
{"year"=>"2017", "month"=>"1", "total"=>"123123"},
{"year"=>"2017", "month"=>"2", "total"=>"613123"},
{"year"=>"2017", "month"=>"3", "total"=>"123"}
]
这是我在Ruby中检索的内容,现在为了与Date一起工作,我想创建一个像这样的Hash:
[
{:name => "2017", :data => {"1" => 123123, "2" => 613123, "3" => 123}},
{:name => "2016", :data => {"1" => 1223, "2" => 613, "3" => 12351}}
]
这个大数组由年键拆分和合并,每个月和总计的组合都在其中。
此外,我想将月份的值用作总计的关键。
任何帮助我入门的小帮助将不胜感激。
您将要开始使用Ruby的#group_by
方法,该方法将按年份对行进行分组,其中年份为键,而匹配行的数组为值:
>> groups = result.group_by { |row| row['year'] }
=> {"2016"=>
[{"year"=>"2016", "month"=>"1", "total"=>"1223"},
{"year"=>"2016", "month"=>"2", "total"=>"613"},
{"year"=>"2016", "month"=>"3", "total"=>"12351"}],
"2017"=>
[{"year"=>"2017", "month"=>"1", "total"=>"123123"},
{"year"=>"2017", "month"=>"2", "total"=>"613123"},
{"year"=>"2017", "month"=>"3", "total"=>"123"}]}
接下来,您将使用#map
转换数据:
>> grouped_rows = groups.map { |year, values| {name: year, data: values.map { |value| [value['month'], value['total']] }.to_h} }
=> [{:name=>"2016", :data=>{"1"=>"1223", "2"=>"613", "3"=>"12351"}},
{:name=>"2017", :data=>{"1"=>"123123", "2"=>"613123", "3"=>"123"}}]
如果希望按所示对行进行排序,则可以通过对结果调用#sort_by
来完成:
>> grouped_rows.sort_by { |row| -row[:name].to_i }
=> [{:name=>"2017", :data=>{"1"=>"123123", "2"=>"613123", "3"=>"123"}},
{:name=>"2016", :data=>{"1"=>"1223", "2"=>"613", "3"=>"12351"}}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.