我有一个表'用户'和另一个表'位置',每个用户库存位置有一行(符号,份额和价格)。我想知道每个用户投资组合的价值,即他们的头寸(股票*价格)的总和。
实施例: 用户表
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的新手。提前谢谢。
答案 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