Ruby on Rails:基于其他列数据汇总表列行值

Eva*_*van 3 activerecord ruby-on-rails

我有一个列'id','resource_id','read_time','value'的表,其中'value'是一个浮点数

我想要完成的是返回一个记录列表,使每条记录的"值"是特定"read_time"但具有不同"resource_id"值的所有记录的总和.

我想知道是否有一种聪明的方法(即不循环遍历所有条目)来实现这一目标.目前我正在实现这些方面:

@aggregate_meters = []
@res_one_meters = Meter.find(:all, :conditions => ["resource_id = ?", 1])

@res_one_meters.each do |meter|
  read_time = meter.read_time
  value = meter.value
  if res_two_meter = Meter.find(:first, :conditions => ["resource_id = ? AND read_time = ?", 2, read_time ])
    value = value + res_two_meter.value
  end
  aggregate_meter = Meter.new(:read_time => read_time, :value => value, :resource_id => 3)
  @aggregate_meters.push(aggregate_meter)
end
Run Code Online (Sandbox Code Playgroud)

谢谢.

EmF*_*mFi 5

ActiveRecord :: Calculate是你的朋友.让您通过一次数据库调用完成所需的操作.它使用组中使用的列中的唯一值作为键返回哈希值.

这是您编写的代码,重写为使用sum.

values = Meter.sum(:value, :group => :read_time)

values.each do |read_time, value|
  aggregate_meter = Meter.new(:read_time => read_time, :value => value, :resource_id => 3)
  @aggregates_meter.push(aggregate_meter)
end
Run Code Online (Sandbox Code Playgroud)