Mysql 如何对两个不同表的两个不同列的数据求和?

Mysql 如何对两个不同表的两个不同列的数据求和?,mysql,sum,aggregate-functions,Mysql,Sum,Aggregate Functions,我在数据库中有两个表,每个表中有两列,一个用于userid,另一个用于显示一些数字数据 我只想添加数字列的值,但问题是这两个表都具有相同的已用id并不是必须的 我将试着用例子来解释它: table1 userid score1 1 200 2 300 table2 userid score2 1 400 现在我要做的是根据用户id将这两个表中的分数相加,并将其显示在一个新表中,如下所示: userid score_sum

我在数据库中有两个表,每个表中有两列,一个用于userid,另一个用于显示一些数字数据

我只想添加数字列的值,但问题是这两个表都具有相同的已用id并不是必须的

我将试着用例子来解释它:

table1

userid  score1

  1       200
  2       300


table2

userid  score2

  1       400
现在我要做的是根据用户id将这两个表中的分数相加,并将其显示在一个新表中,如下所示:

userid  score_sum

  1       600
  2       300
如果我只是使用

Select sum(table1.score1+table2.score2) 
FROM table1 JOIN table2 ON table1.id=table2.id

然后,它将只显示
userid 1
的总和,因为
userid 2
不在第二个表中。因此,请建议我如何解决此问题。

通常,您会通过执行完整的外部联接来解决此问题,但MySql不支持此类联接,因此需要伪造

SELECT SUM(table1.score1 + IS NULL(table2.score2) 
FROM table1 
LEFT JOIN table2 
ON table1=table1.id
询问 解释 首先,我们需要获得
table1
table2
中存在的所有用户ID的列表,以便我们可以使用此列表作为数据集,从中执行
左外部联接。任何从
table1
table2
启动联接的方法都不会剪切它,因为如果所选的表不包含某些用户id X,则该用户将根本不会出现在最终结果中

通过subselect创建了
userid
resultset之后,我们
左键连接两个感兴趣的表以获得每个用户的分数。如果两个表中都没有一个用户,那么该用户的分数将为
NULL
(因为
NULL+number
给出
NULL
),因此我们使用
COALESCE
将任何
NULL
转换为
0


我应该注意,无论哪个用户包括(或不包括)在哪个表中,或者表在查询中的显示顺序如何,此查询都将正常工作。

不确定是否需要联接,只需要在外部查询中联合(全部)评分表和分组求和

SELECT userid, SUM(score)
FROM ( 
    SELECT userid, score1 as score FROM table1 
    UNION ALL SELECT userid, score2 as score FROM table2
) t 
GROUP BY t.userid 

但不确定为什么需要加入;看到张贴的答案了吗?
SELECT userid, SUM(score)
FROM ( 
    SELECT userid, score1 as score FROM table1 
    UNION ALL SELECT userid, score2 as score FROM table2
) t 
GROUP BY t.userid