左连接计算值

时间:2015-08-11 21:11:53

标签: mysql left-join

我有一个表'用户'和另一个表'位置',每个用户库存位置有一行(符号,份额和价格)。我想知道每个用户投资组合的价值,即他们的头寸(股票*价格)的总和。

实施例: 用户表

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的新手。提前谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

加入(LEFT,RIGHT,INNER)与此无关。在这种情况下LEFT JOIN意味着"给我表USERS中的所有行,即使他们在表格组合中没有一行"。您可以阅读有关联接https://msdn.microsoft.com/en-us/library/system.configuration.configuration.sections%28v=vs.110%29.aspx的信息。你的查询看起来像这样。

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