Mysql 如何对两个不同表的两个不同列的数据求和?
我在数据库中有两个表,每个表中有两列,一个用于userid,另一个用于显示一些数字数据 我只想添加数字列的值,但问题是这两个表都具有相同的已用id并不是必须的 我将试着用例子来解释它: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
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