gpt4 book ai didi

sql - 事件记录 : Find collection based on sum of two associated tables

转载 作者:行者123 更新时间:2023-11-29 13:34:24 24 4
gpt4 key购买 nike

我正在尝试在我们的系统中查找“支付不足”事件的集合。我们正在使用 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 中实现这一点?如果可以,我该怎么做?

最佳答案

嘿,我认为在 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)")

希望对您有所帮助!

关于sql - 事件记录 : Find collection based on sum of two associated tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16622216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com