首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Nulls和自定义存储桶求和

使用Nulls和自定义存储桶求和
EN

Stack Overflow用户
提问于 2019-02-03 11:42:28
回答 1查看 47关注 0票数 0

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

例如,这就是正在发生的事情(第二行,第四个字段显示为空,因为第二个字段为空)

代码语言:javascript
运行
复制
1 |   3  |   5  |   9
2  | NULL |   3   |  NULL
8  |   1  |    1  |   10

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

代码语言:javascript
运行
复制
1 |   3  |   5  |   9
2  | NULL |   3   |  5
8  |   1  |    1  |   10

理想情况下,我还想添加第五列,根据字段四中的值将这些值分组为"1-3“、"4-6”、"7-10“。诚然,我不知道如何做这一部分-任何帮助或提示将是有帮助的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-03 11:44:54

一种方法是使用coalesce()

代码语言:javascript
运行
复制
select t.*,
       (coalesce(field1, 0) + coalesce(field2, 0) + coalesce(field3, 0)
       ) as total
from t;

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

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

https://stackoverflow.com/questions/54499765

复制
相关文章

相似问题

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