我的数据库中有几个表。我们称它们为table1,table2,table3。
它们都有一个名为value
的列。
我需要创建一个查询,该查询将返回一个数字,该数字是所有表中所有value
列的总和...
我尝试了以下方法:
SELECT (SELECT SUM(value) FROM table1) + (SELECT SUM(value) FROM table2) + (SELECT SUM(value) FROM table3) as total_sum
但是,当内部SUM
中的至少一个为NULL
时,整个总值(此处为total_sum
)为NULL
,因此不是很值得信赖。
当某个内部SUM
查询中没有值时,我需要它返回0,因此它不会影响其余SUM
。
为了更清楚一点,假设我有以下两个表:
TABLE1:
ID | NAME | VALUE
1 Name1 1000
2 Name2 2000
3 Name3 3000
TABLE2:
ID | NAME | VALUE
1 Name1 1500
2 Name2 2500
3 Name3 3500
最终,我需要的查询将返回一个值-13500,这是此处所有表的VALUE
列下的所有值的总和。
所有其他列对于所需的查询都没有意义,在这种情况下,我什至不关心性能。
答案 0 :(得分:2)
您可以使用Coalesce如下实现
SELECT
(SELECT coalesce(SUM(value),0) FROM table1) +
(SELECT coalesce(SUM(value),0) FROM table2) +
(SELECT coalesce(SUM(value),0) FROM table3) as total_sum
另一种方法是使用union all
将所有值合并到单个表中
select distinct coalesce(sum(a.value), 0) as total_sum from
(select value from table1
union all
select value from table 2
union all
select value from table 3) a;
答案 1 :(得分:0)
您可以使用ISNULL函数来处理NULL。
SELECT ISNULL((
SELECT SUM(value) FROM table1
)
, 0
) + ISNULL((
SELECT SUM(value) FROM table2
)
, 0
) + ISNULL((
SELECT SUM(value) FROM table3
)
, 0
) AS total_sum;
答案 2 :(得分:0)
您可以简单地将它们全部加起来:
select sum(total) as Total
from (
select sum(value) as total from Table1
union all
select sum(value) as total from Table2
union all
select sum(value) as total from Table3
) t;