【发布时间】:2018-02-18 16:17:00
【问题描述】:
现在,我正在尝试将数据库中的一组总和分组到一个二维数组中。就目前而言,代码看起来像这样:
@TwoDArray = Array.new
@eachPossibleValue.each do |specificValue|
@innerArray= Array.new
@innerEachPossibleValue.each do |innerSpecificValue|
@innerArray.push(@database.where(fieldOne: specificValue).where(fieldTwo: innerSpecificValue).sum("y_value"))
end
@twoDArray.push(@innerArray)
end
如您所见,每次运行时都会出现一堆 O(n*m) 查询,但它确实有效。它创建特定组合的内部数组,然后将该数组推送到主数组,冲洗并重复所有可能的外部值。我们能够在一个查询中找到一个接近的答案来完成这一切:
@database.group(:fieldOne, :fieldTwo).order("fieldOne", "fieldTwo")
.pluck("sum(y_value)").each_slice(numberOfUniqueFieldTwoEntries).to_a
这会达到我们想要的效果……我想。它只是获取所有值的大型数组,例如展开的 2D 数组,然后将其切片,因为它是统一的(因为有时没有任何条目只会在其位置产生 0。)
问题是,由于 fieldOne、fieldTwo 的某些组合没有条目,因此它们被跳过了。 each_slice 的幼稚方法不再有效,因为那里没有任何零;他们只是被排除在外。
有没有办法在单个查询中获取这些总和,同时还包括某些组合不产生条目的实例?
【问题讨论】:
标签: ruby-on-rails arrays ruby activerecord