首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sql -从多个表中获取相同列的总和

sql -从多个表中获取相同列的总和
EN

Stack Overflow用户
提问于 2018-07-02 21:18:06
回答 3查看 1.6K关注 0票数 1

我的数据库中有几个表。让我们称它们为table1,table2,table3。它们都有一个名为value的列。我需要创建一个返回单个数字的查询,其中这个数字是所有表中所有value列的总和……我已经尝试了以下方法:

代码语言:javascript
复制
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:

代码语言:javascript
复制
  ID  |  NAME  |  VALUE
   1    Name1     1000
   2    Name2     2000
   3    Name3     3000

TABLE2:

代码语言:javascript
复制
  ID  |  NAME  |  VALUE
   1    Name1     1500
   2    Name2     2500
   3    Name3     3500

最后,我需要的查询将返回一个值- 13500,它是这里所有表的VALUE列下的所有值的总和。

所有其他列对于所需的查询都没有意义,在这种情况下,我甚至不太关心性能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-02 21:21:37

您可以使用Coalesce实现它,如下所示

代码语言:javascript
复制
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将所有值合并到单个表中

代码语言:javascript
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2018-07-02 21:20:43

您可以使用ISNULL函数来处理NULL。

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2018-07-02 21:23:46

您可以简单地将它们全部求和:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51137139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档