空值和自定义存储桶求和

时间:2019-02-03 03:42:28

标签: sql postgresql

如果一个或多个字段为空,如何添加三个值(C1,C2,C3中的值)?我希望将null添加为零,并将总数添加到新字段4中。现在,如果至少一个值是null,我的查询将简单地返回null。

例如,这就是发生的情况(第二行,第四字段为空,因为第二字段为空)

1 |   3  |   5  |   9
2  | NULL |   3   |  NULL
8  |   1  |    1  |   10

例如,这就是我想要在返回集中发生的事情

1 |   3  |   5  |   9
2  | NULL |   3   |  5
8  |   1  |    1  |   10

理想情况下,我还要添加第五列,以基于字段4中的值将这些值分组为“ 1-3”,“ 4-6”,“ 7-10”的存储桶。诚然,我不知道如何做这部分-任何帮助或提示都会有所帮助。

1 |   3  |   5  |   9  | 7-10
2  | NULL |   3   |  5  | 4-6
8  |   1  |    1  |   10  | 7-10

距离我在PostgreSQL工作已经有几年了,所以我猜我只是在搞些简单的事情。在下面对我的查询的任何帮助将不胜感激。

SELECT "FIELD ONE", "FIELD TWO", "FIELD THREE", "FIELD ONE + FIELD TWO + FIELD THREE" AS "TOTAL FIELD" FROM "Table1";

1 个答案:

答案 0 :(得分:0)

一种使用coalesce()的方式:

select t.*,
       (coalesce(field1, 0) + coalesce(field2, 0) + coalesce(field3, 0)
       ) as total
from t;

然后,您可以使用case表达式。但是,我也喜欢使用横向连接:

select t.*,
       (case when total <= 3 then '1-3'
             when total <= 6 then '4-6'
             else '7-10'
        end) as range
from t left join lateral
     (select sum(field) as total
      from (values (field1), (field2), (field3)) v(field)
     ) s