如何对最后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
在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