我的数据库中有以下内容:
postcode
66
2
34
25
54
98
1
14
5
39
37
现在用一个很好的方法将这些记录分组到第一个数字(并计算它)? 所以哈希输出是......像这样:
1 => 2
5 => 2
9 => 1
3 => 3
等
Model.group(:postcode).count
将是这里考虑两个数字的标准查询。是否需要添加? 或者我应该直接修改数据库并剪切第二个数字(我不想那样)。
答案 0 :(得分:2)
从db获取Array
array = Model.pluck(:postcode)
按第一个数字分组,映射值数组以获取计数
Hash[ array.group_by {|n| n.to_s[0] }.map {|k, v| [k.to_i, v.size] }]
答案 1 :(得分:0)
grouped_by = ['65', '15', '11', '29','4','56'].group_by { |n| n[0] }
# {"6"=>["65"], "1"=>["15", "11"], "2"=>["29"], "4"=>["4"], "5"=>["56"]}
grouped_by.map{ |k,v| {k => v.count} }
# [{"6"=>1}, {"1"=>2}, {"2"=>1}, {"4"=>1}, {"5"=>1}]
它首先按第一个数字分组,然后映射生成的哈希值,并将值替换为值的计数。
答案 2 :(得分:0)
对于纯SQL实现:
Model.group("SUBSTR(CAST(postcode as CHAR), 1, 1)").count