如何在PostgreSQL中计算多列的总和

71

我想知道在PostgreSQL中是否有一种方法可以计算多个列的总和。

我有一个包含80多个列的表,我必须编写一个查询添加每个列的值。

我尝试使用SUM(col1, col2, col3等) ,但它不起作用。


2
你是指每行的总和,还是所有行的总和? - Erwin Brandstetter
我指的是每行的总和。 - Psyche
3
我想进一步澄清,您的意思不是“我想对A列中的所有值求和,然后将其加到B列的总和上”,而是“在每一行中,我想要对A列和B列中的值进行求和,并将结果存储起来”。 - Noumenon
4个回答

115
SELECT COALESCE(col1,0) + COALESCE(col2,0)
FROM yourtable

1
我尝试过了,但是有些列没有值(NULL),最终结果就是 NULL,所以不行。 - Psyche
答案已经修改以考虑到您要求每行求和的评论。 - qqx
我如何使用用“AS”请求的临时列来完成这个操作? - DataGreed
@qqx 有人能解释一下为什么在col1和col2都是数值类型的情况下我们需要使用COALESCE吗? - Bulrush
@Bulrush,那将是一个单独的问题,很可能已经有答案了。 - qqx

78

这取决于你希望如何对这些值进行求和。如果我正确理解了你的问题,你正在寻找此示例中的第二个SELECT:

template1=# SELECT * FROM yourtable ;
 a | b 
---+---
 1 | 2
 4 | 5
(2 rows)

template1=# SELECT a + b FROM yourtable ;
 ?column? 
----------
        3
        9
(2 rows)

template1=# SELECT SUM( a ), SUM( b ) FROM yourtable ;
 sum | sum 
-----+-----
   5 |   7
(1 row)

template1=# SELECT SUM( a + b ) FROM yourtable ;
 sum 
-----
  12
(1 row)

template1=# 

感谢您提供如此全面的答案。就像其他答案中的评论一样,我也遇到了SUM返回NULL的问题,所以如果有人需要,这里是一个修复方法:SELECT GREATEST(0, SUM(a + b)) FROM yourtable; - Lorenzo

18

结合当前回答,使用此方法获取总和 SUM:

SELECT SUM(COALESCE(col1,0) + COALESCE(col2,0)) FROM yourtable;

0
SELECT(
    SELECT SUM(t.f)
    FROM (VALUES (yourtable.col1), (yourtable.col2), (yourtable.col3)) t(f)
)
FROM yourtable;

你能解释一下这是如何工作的吗?你会怎么称呼t(f) - chrismarx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接