我有一个模型项目和付款
class Project < ActiveRecord::Base
has_many :payments, :dependent => :destroy
end
class Payment < ActiveRecord::Base
belongs_to :project
end
我正在尝试查找项目的总金额高于项目目标金额
@projects=Project.joins(:payments).where('enabled = true and amount < sum(payments.amount)')
这显示我的错误,因为我的尝试太模糊了
我应该如何用连接表中的总和来比较字段?
答案 0 :(得分:0)
首先,您的错误是因为两个表都有相同的列名amount
,您可以使用projects.amount
解决此错误,但aggregate function
sum
不允许where
sql的子句。您可以group by
这样使用having
子句:
@projects=Project.joins(:payments).group("payments.project_id").where('enabled = true').having("sum(payments.amount) > projects.amount")
您也可以尝试这种方式,因为PG
不支持其他列选择哪些不在group by
子句中:
@projects=Project.includes(:payments).where("projects.id = payments.project_id and enabled = true").select{ |p| p.amount < p.payements.sum(&:amount) }
答案 1 :(得分:0)
好的我找到了如何在postgres上使用建议的mysql答案的解决方案
Project.select("projects.*").joins(:payments).group("projects.id").where('enabled = true').having("sum(payments.amount) > projects.amount")