如何分组和计算最后N个结果?

时间:2017-02-20 19:01:32

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5 rails-postgresql

在Rails中,您可以使用:

  

Model.group(:字段).Count之间的

产生类似的东西:

  

{" a" => 7," b" => 5," c" => 3" d" => 3," e" => 4}

但是, DATABASE DATABASE 进行计算时,计数计数,而不是整个表格 p>

不要工作:

Model.limit(100)。集团(:字段).Count之间的

  

limit将限制散列输出键而不是使用的表格行

Model.last(100)。集团(:字段).Count之间的

  

Last返回一个数组并引发错误

我正在使用: * Ruby 2.3.3p222 * Rails 4.2.4 *第9.5.6页

2 个答案:

答案 0 :(得分:2)

正如您所提到的,limit正在分组实例上应用,而不是实例本身。一个简单的解决方法是:

Model.where(id: Model.limit(100).select(:id)).group(:field).count

答案 1 :(得分:1)

也可以使用group_by对数组对象进行分组:

grouped = Model.last(100).group_by(&:field).map { |k,v| [k, v.length] }

这将返回以下矩阵:

#=> [["Field value 1", value_1_count], ["Field value 2", value_2_count], etc...]

矩阵也可以变成哈希:

grouped.each_with_object({}) { |value, memo| memo[value[0]] = value[1] }

总结一下,请尝试以下方法:

Model.last(100)
  .group_by(&:field)
  .each_with_object({}) { |(key, value), memo| memo[key] = value.length }