我正在尝试获取一些统计数据。
Model.where(status:@statuses).group(:sub_group, :status).count
这会让我回头
{
["sub_group1", "status1"] => 3},
["sub_group2", "status3"] => 7,
["sub_group1", "status2"] => 5, ....etc }
我想合并它们,因此每个元素都有一个唯一的子组。
e.g。哈希如:
{
"sub_group1" => {"status1" => 3, "status2" => 5,
"sub_group2" => {"status3" => 7},
}
或数组
[
["subgroup1", {"status1" = 3, "status2" => 5}],
["subgroup2".....
]
即。我希望将所有这些术语与sub_group合并为主标题,以便我可以在一个项目中获得子组的结果。
大脑今天不工作......
答案 0 :(得分:1)
您可以尝试merge!
:
result = Model.where(status: @statuses).group(:sub_group, :status).count
result.reduce({}) do |collection, (attributes, count)|
collection.merge!(attributes[0] => { attributes[1] => count }) do |_, prev_value, next_value|
prev_value.merge!(next_value)
end
end
答案 1 :(得分:0)
我想你可以这样做:
res = Model.where(status:@statuses).group(:sub_group, :status).count
nice_hash = {}
res.each do |key, count|
nice_hash[key[0]] = {} unless nice_hash[key[0]]
nice_hash[key[0]][key] = count
end
此nice_hash
后应采用所需格式
答案 2 :(得分:0)
请尝试使用以下代码。
structs
答案 3 :(得分:0)
我相信你的问题的答案应该是这个或者这应该指引正确的方向:
Model.where(status:@statuses).group_by(&:sub_group)
如果你只需要你提到的状态,你可以这样做:
Model.where(status:@statuses).select(:status, :sub_group).group_by(&:sub_group)