SQL联接,从子查询求和以计算总聚合量

SQL联接,从子查询求和以计算总聚合量,sql,ruby-on-rails,postgresql,join,subquery,Sql,Ruby On Rails,Postgresql,Join,Subquery,我已经在active record中完成了所有这些操作,但它不适用于分页,因此我想切换到带有偏移量的SQL查询,以便高效查询。-与其获取User.all,然后计算相关对象的计算,然后将其编译成一个绑定数组,最后将其发送到视图,不如使用find_by_sql命令处理calc,以便更轻松地管理分页等 在我玩的小型股票市场模拟器中,试图计算出用户的总投资额+剩余未投资额 有一个股价表,其中有多个条目用于每个公司的每个新股价,因此希望: a) 从该表中选择最后一项以获取最新共享 价格 b) owner

我已经在active record中完成了所有这些操作,但它不适用于分页,因此我想切换到带有偏移量的SQL查询,以便高效查询。-与其获取User.all,然后计算相关对象的计算,然后将其编译成一个绑定数组,最后将其发送到视图,不如使用find_by_sql命令处理calc,以便更轻松地管理分页等

在我玩的小型股票市场模拟器中,试图计算出用户的总投资额+剩余未投资额

有一个股价表,其中有多个条目用于每个公司的每个新股价,因此希望:

  • a) 从该表中选择最后一项以获取最新共享 价格
  • b) ownerships显示用户表中的用户拥有什么 公司股份
  • c) 所以如果我们把所有人的股份乘以 表中列出了a)的最新股价,然后我们得到了总数 投资额
  • d) 一旦我们有了所有项目的总投资额 公司,我们需要增加用户拥有的未投资美元 与他们相关,因此总投资+美元应为我们提供 给定用户的总估价
  • e) 让我恼火的是,用户可能在特定时间不拥有任何东西,这意味着他在所有权表中没有任何条目。在这种情况下,查询只需返回其未投资的美元金额
试图通过“最富有”用户获得每个客户和订单的总估值:

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(即,没有自有投资金额,因为他们没有在任何公司拥有股份)+美元,以获得他们拥有的金额,但我不明白如何让SQL做到这一点

我希望避免使用pgsql function()来实现这种逻辑,但如果上面的内容不明显,我对SQL很糟糕,现在才开始学习。我希望我的解释是可以理解的

您可以在需要将null视为零的计算部分周围添加一个空格(我不清楚需要将哪个部分视为零)

您可以在需要将null视为零的计算部分周围添加一个空格(我不清楚需要将哪个部分视为零)


完全正确你是一个英雄,我希望你的名字会被写进星星。我从来没有听说过联合,但一读到它,我就开始跳舞了。你是一个英雄,我希望你的名字会被写进星星。我从来没有听说过COALESCE,但一读到它,我就开始跳舞了。
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