在rails 3上的ruby中可能在一个查询中检索多列的总和?

Dou*_*ell 4 sum ruby-on-rails-3

我想在表格中获得十几列的总和.

# result will be {:a => 340.5, :b => 21.8, ... }
# where :a has the sum of the :a column values
# entries is an ActiveRecord model, e.g. ScoreCard.where(:user => user)
def self.totals(entries)
  [:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, :m].inject({}) do |tv, col|
     tv[col] = entries.sum(col)
     tv
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法在一个查询中执行此操作?以上生成了十几个查询.

Dyl*_*kow 5

您可以通过手动覆盖这样的select值来执行某些操作,这将运行单个查询,将所有总和作为字段返回:

sums = entries.select("sum(a) as a, sum(b) as b, ....").first
tv[:a] = sums[:a]
tv[:b] = sums[:b]
# etc....
Run Code Online (Sandbox Code Playgroud)

  • entries.select([:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:m] .collect {| col |"sum( #{col})as#{col}"} .join(',')).首先就像魅力一样.谢谢! (2认同)