【问题标题】:How to compute the sum of multiple columns in PostgreSQL如何计算 PostgreSQL 中多列的总和
【发布时间】:2013-03-21 02:49:09
【问题描述】:

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

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

我尝试使用 SUM(col1, col2, col3 etc),但没有成功。

【问题讨论】:

  • 您是指每行的总和,还是所有行的总和?
  • 我的意思是每行的总和。
  • 我只是想进一步澄清一下,您的意思不是“我想对所有 A 列求和,然后将其添加到 B 列的总和”,您的意思是“在每一行中,我想将 A 列中的值与 B 列中的值相加并将其存储在结果中”。

标签: postgresql


【解决方案1】:
SELECT COALESCE(col1,0) + COALESCE(col2,0)
FROM yourtable

【讨论】:

  • 我试过了,但是有些列没有值(NULL),最终结果是NULL,所以不行。
  • 已修改答案以说明这一点,以及您正在寻找每行总和的评论。
  • 我该如何处理我用“AS”请求的临时列?
  • @qqx 如果 col1 和 col2 都是数字数据类型,有人能解释一下为什么我们需要在这里使用 COALESCE 吗?
  • @Bulrush 这将是一个单独的问题,并且可能已经回答了。
【解决方案2】:

这取决于您希望如何对这些值求和。如果我正确阅读了您的问题,则您正在寻找此示例中的第二个 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=# 

【讨论】:

  • 感谢您的全面回答。就像另一个答案中的 cmets 一样,我在 SUM 返回 NULL 时遇到了麻烦,所以如果有人需要,这里有一个修复:SELECT GREATEST(0, SUM(a + b)) FROM yourtable;
【解决方案3】:

结合当前答案并使用它来获得总和:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多