gpt4 book ai didi

SQL joining,从子查询求和计算总聚合量

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

我已经在事件记录中完成了所有这些工作,但它不适用于分页,所以我想切换到带有 OFFSET 的 SQL 查询,这样我就可以高效地查询。 - 而不是获取 User.all,然后对相关对象进行计算,然后将其全部编译到捆绑数组中,最后将其发送到 View 我想在 find_by_sql 命令中处理计算,这样更容易管理分页等

尝试在我正在玩的小型股票市场模拟器中计算出用户的总投资额 + 他们剩余的未发明金额。

有一个股价表,每个公司的每个新股价都有多个条目,所以想要:

  • a) 从该表中选择最后一个条目以获取最新的份额价格
  • b) ownerships 显示 users 表中的用户拥有什么公司股份
  • c) 因此,如果我们将 shares_owned 与所有权相乘表中包含 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(即没有拥有投资金额,因为他们在没有公司拥有股份)+ u.dollars 以获得他们拥有的金额,但我不明白如何让 SQL 做到这一点。

我希望避免需要一个 pgsql function() 来实现这个逻辑,但是如果上面没有让它变得明显,我在 SQL 方面很糟糕并且现在才学习它。我希望我的解释是可以理解的!

最佳答案

您可以添加 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

关于SQL joining,从子查询求和计算总聚合量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8348488/

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