如何使用Postgres的rails模型中的.group和.sum?

时间:2013-03-26 01:11:24

标签: ruby-on-rails-3 postgresql rails-postgresql

我的开发环境(SQLite)中有一个功能正常的方法,它看起来像这样:

def self.ytd
Production.find(
    :all,
    conditions: ["year == ?", Time.now.year],
    select: "carrier_id, amount, SUM(amount) as sum_amount",
    group: :carrier_id
    )
end

此方法成功搜索包含:carrier_id:amount列的表格。然后,它会根据分组的:amount

:carrier_id列进行求和

我正在尝试使用Postgresql转换为生产环境。以下代码成功地对记录进行分组,但我无法对:amount求和。我已经尝试修改.sum("productions.amount")方法而没有成功。我确信有一个简单的解决方案,但它暗示了我......有人可以帮忙吗?感谢

def self.ytd
Production.select("DISTINCT ON (productions.carrier_id) productions.carrier_id, productions.amount ")
               .where("productions.year = (?)", "#{Time.now.year}")
               .group("productions.amount, productions.carrier_id, productions.id")
end

1 个答案:

答案 0 :(得分:1)

已移除DISTINCT ON,已添加SUM(amount) as sum_amount并已在:carrier_id上分组,产生了所需的结果。

def self.ytd
Production.select("productions.carrier_id, SUM(amount) as sum_amount")
               .where("productions.year = (?)", "#{Time.now.year}")
               .group("productions.carrier_id")      
end