繁体   English   中英

Ruby SQL结果分组哈希

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM