我正在尝试在我们的系统中找到“欠薪”事件的集合。我们使用Postgres数据库运行Rails 3.2。
数据结构如下。
class Event < ActiveRecord::Base
has_many :charges
has_many :transactions
end
class Charge < ActiveRecord::Base
belongs_to :event
end
class Transaction < ActiveRecord::Base
belongs_to :event
end
薪酬过低的事件定义为总费用大于总交易额的事件。
sum(charges.total) > sum(transactions.total)
我的SQL技能很差,我一直在尝试使用ActiveRecord执行此操作。这是我最近的尝试,但它没有带回正确的系列。特别是它似乎包括有多个交易的完全付费事件。
Event.joins(:charges,:transactions).group('charges.event_id, transactions.event_id').having("sum(charges.total) > sum(transactions.total)")
是否有可能在ActiveRecord中实现这一点,如果是这样,我该怎么办呢?
答案 0 :(得分:1)
嘿,我认为在SQL中应该是那样的
select * from events where
(select sum(charges.total) from charges where charges.event_id = events.id) >
(select sum(transactions.total) from transactions where
transactions.event_id = events.id)
所以现在你可以建立像
这样的范围scope :unpaid, find_by_sql("select * from events where
(select sum(charges.total) from charges where charges.event_id = events.id) >
(select sum(transactions.total) from transactions where
transactions.event_id = events.id)")
我希望它会有所帮助!