我已经在活动记录中完成了所有这些,但它不能用于分页,所以我想切换到带有OFFSET的SQL查询,这样我就可以有效地进行查询。 - 而不是获取User.all,然后计算相关对象的计算,然后将其全部编译成捆绑的数组,最后将其发送到视图我想在find_by_sql命令中处理计算,这样就更容易管理分页等。
尝试在我正在玩的小股市模拟器中计算用户投入的总金额+剩余的未发行金额。
拥有一个股票价格表,每个公司的每个新股价都有多个条目,所以想要:
试图通过“最富有”的用户获得每位客户和订单的总估值:
select u.id,
sum(
((
select s.price from shareprices s
WHERE s.company_id = o.company_id and u.id = o.user_id
ORDER BY id DESC LIMIT 1) * o.shares_owned
))
+ u.dollars as totalAmount
from users as u full outer join ownerships as o on u.id = o.user_id group by u.id order by totalamount ASC
对于拥有所有权和计算投资总额的计算,这种情况会很好,但对于那些只有未投资资金的用户,我怎样才能让他们在该总计列中显示,所以基本上是0(即没有自有投资)数量,因为他们拥有没有公司的股份)+ u.dollars得到他们有多少,但我不明白如何让SQL做到这一点。
我希望避免需要一个pgsql函数()来实现这个逻辑,但如果上面的内容没有明显,我在SQL上很糟糕,现在才学习它。我希望我的解释是可以理解的!
答案 0 :(得分:1)
你可以在计算部分周围添加一个colaesce,需要将空值视为零(我不清楚哪个部分需要)
sum(COALESCE
((
select s.price from shareprices s
WHERE s.company_id = o.company_id and u.id = o.user_id
ORDER BY id DESC LIMIT 1) * o.shares_owned
)) , 0))
+ u.dollars totalAmount