sql - rails/postgres 中的阈值求和

标签 sql ruby-on-rails ruby-on-rails-3 postgresql arel

我正在制作一个 walkathon Rails 应用程序。每个步行者都由 promise 每圈最高金额的人赞助。

我有一个名为 sponsorships 的表,其中包含 walker_idamount_per_lapmax_amount 列。我想编写一个 SQL 查询来确定步行者筹集了多少钱。

还有一个 walkers 表,其中包含 idnamelaps 列。

我知道这不是有效的 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/

相关文章:

sql - 如何查询并仅获取具有相同列值的连续行

ruby-on-rails - Rails3 - check_box_tag - 如何禁用条件

sql - 在 Postgres 中将三列数据连接成一列

ruby-on-rails - 对象正在保存,但参数没有

mysql - SQL如何替换选择返回的值?

html - 在 Rails 中围绕内容包装 Link_to

使用不正确的凭据登录时,Jquery Mobile Rails & Devise 加载页面时出错

ruby-on-rails - Activerecord where 条件与没有表名前缀的连接

mysql - 用于为论坛索引选择数据的二阶相关表中的 SQL COUNT

sql - 使用/JOIN 查询更快地删除