Rails仅按其第一个数字对记录进行分组

时间:2014-06-05 10:04:46

标签: ruby-on-rails activerecord

我的数据库中有以下内容:

postcode
66
2
34
25
54
98
1
14
5
39
37

现在用一个很好的方法将这些记录分组到第一个数字(并计算它)? 所以哈希输出是......像这样:

1 => 2
5 => 2
9 => 1
3 => 3

Model.group(:postcode).count

将是这里考虑两个数字的标准查询。是否需要添加? 或者我应该直接修改数据库并剪切第二个数字(我不想那样)。

3 个答案:

答案 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