Table1
和Table2
都包含名为Username
和Score
的列。 Table1
确保拥有查询所需的所有用户,而Table2
仅拥有这些用户的一部分。我如何编写此查询,以便即使Table2不包含匹配的用户,我也总是得到两个表的总分?换句话说,如果Table2中为null,我想将其视为零。
Table1 Table2
User1 200 100
User2 200 NULL
User3 200 300
User1 TotalScore = 300
User2 TotalScore = 200
User3 TotalScore = 500
答案 0 :(得分:4)
我认为简单的聚合就可以解决问题
Select UserName
,Score=sum(Score)
From (
Select UserName,Score From Table1
Union All
Select UserName,Score From Table2
) A
Group By UserName
答案 1 :(得分:3)
使用COALESCE进行空检查,并与表2左连接
select username, COALESCE(Table1,0) + COALESCE( Table2,0) from t
因此完整的查询将
select t1.username,t1.value as table1_value,
t2.value as table2_value,
COALESCE(t1.value,0) + COALESCE( t2.value,0) as TotalScore
from t1 left join t2 on t1.username =t2.username
答案 2 :(得分:1)
LEFT JOIN
将确保您将从Table1
中获得所有用户。
如果Table2
中不存在特定用户,则该表中该用户的值将为NULL
,要将其视为0,则需要使用COALESCE
。
尝试一下:
select t1.username,
t1.score,
t2.score,
t1.score + coalesce(t2.score, 0) totalScore
from table1 t1
left join table2 t2 on t1.username = t2.username
答案 3 :(得分:1)
使用左连接进行连接,并合并将NULL合并为0。