我的数据库中有几个表。让我们称它们为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
列下的所有值的总和。
所有其他列对于所需的查询都没有意义,在这种情况下,我甚至不太关心性能。
发布于 2018-07-02 21:21:37
您可以使用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;
发布于 2018-07-02 21:20:43
您可以使用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;
发布于 2018-07-02 21:23:46
您可以简单地将它们全部求和:
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;
https://stackoverflow.com/questions/51137139
复制相似问题