【问题标题】:left join with calculated value具有计算值的左连接
【发布时间】:2015-08-11 21:11:52
【问题描述】:

我有一个表“用户”和另一个表“仓位”,每个用户的股票仓位(符号、股票和价格)都有一行。我想知道每个用户的投资组合的价值,即他们头寸的总和(股票*价格)。

示例: 用户表

user_id, user_name
1, bob
2, steve

职位表

position_id, user_id, symbol, shares, price
1, 1, aapl, 100, 119.50
2, 1, ibm, 200, 155.32
3, 2, goog, 100, 660.05

我希望输出是:

user_name, portfolio_value
bob, 43014
steve, 66005

(其中 43014 = 119.50*100 + 155.32*200)

我确定有一个左连接可以计算每个位置值(股票 * 价格),然后按用户与组求和,但我是 mysql 新手。提前谢谢你。

【问题讨论】:

  • 您似乎已经推理出需要查询的内容。尝试先自己写出查询,或描述您在这样做时遇到了什么问题。

标签: mysql left-join


【解决方案1】:

联接(左、右、内)与此无关。在这种情况下,LEFT JOIN 表示“给我表 USERS 中的所有行,即使它们在表投资组合中没有行”。您可以阅读有关加入 here 的信息。您的查询将如下所示。

SELECT u.user_name, SUM(p.price*p.shares) AS portfolio_value
FROM users u 
LEFT JOIN positions p ON u.user_id = p.user_id
GROUP BY u.user_name

【讨论】:

    【解决方案2】:

    您需要做的第一件事是将头寸转换为投资组合价值。这可以通过以下方式完成:

    select user_id, sum(shares * price) as portfolio_value
    from portfolio
    group by user_id
    

    这可以连接到用户表的名称:

    select user_name, portfolio_value
    from users
    inner join (
        select user_id, sum(shares * price) as portfolio_value
        from portfolio
        group by user_id
    ) as values
    on users.user_id = values.user_id
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多