Mysql 用计算值左连接

Mysql 用计算值左连接,mysql,left-join,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 我希望输出为: use

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

例如: 用户表

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

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

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
联接(左、右、内)与此无关。在这种情况下,左连接意味着“给我表用户的所有行,即使他们在表公文包中没有一行”。您可以阅读有关连接的信息。您的查询如下所示

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

你似乎已经理清了需要询问的问题。试着先自己写下这个查询,或者描述一下你这样做有什么困难。