如何对最后N个结果进行分组统计?

How to group and count the last N results?

在Rails中,您可以使用:

Model.group(:field).count

产生类似的东西:

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

但是我怎么 count 只在 最后 N 行, 而不是整个 table, DATABASE 正在计算?

不工作:

Model.limit(100).group(:field).count

limit will limit the hash output keys not the table lines used

Model.last(100).group(:field).count

Last returns a Array and raises an error

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

数组对象也可以使用 group_by:

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

这将return以下矩阵:

#=> [["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 }

如您所述,limit 应用于分组实例,而不是实例本身。一个简单的解决方法是:

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