我正在制作一个 walkathon Rails 应用程序。每个步行者都由 promise 每圈最高金额的人赞助。
我有一个名为 sponsorships
的表,其中包含 walker_id
、amount_per_lap
和 max_amount
列。我想编写一个 SQL 查询来确定步行者筹集了多少钱。
还有一个 walkers
表,其中包含 id
、name
和 laps
列。
我知道这不是有效的 SQL,但我想要这样的东西,但不知道最好的方法。可以在执行查询之前提供 walker_id 和 laps。
SELECT SUM(MIN(Laps * sponsorships.amount_per_lap, sponsorships.max_amount)) FROM sponsorships where sponsorships.walker_id = 1;
我在 rails 中做这个,所以我试图弄清楚如何在 Arel 中做这样的事情,但无法弄清楚。
如有任何帮助,我们将不胜感激。
编辑:阐明walkers
表。
Edit2:不小心在伪代码中使用了最大值而不是最小值
最佳答案
我认为您正在寻找的 SQL 是这样的:
select w.id, w.name, sum(least(w.laps * s.amount_per_lap, s.max_amount))
from walkers w
join sponsorships s on w.id = s.walker_id
group by w.id, w.name
least
function是什么适用于您的“不超过 max_amount
”条件。既然您知道要选择什么,那么将其转换为 AR 对您来说应该是一件简单的事情;对于这样的事情,我倾向于直接使用 SQL。
关于sql - rails/postgres 中的阈值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354350/