在计算列 postgresql 中使用 case 表达式
Using case expressions in a calculated column postgresql
已编辑以提供示例数据
我正在尝试创建一个计算列来计算其他 2 列的总和,这应该很容易。但是,两列中的某些值都是空值,因此我想使用 case 表达式将两列中的空值替换为 0,然后将结果值相加。另一个复杂因素是第二列包含带逗号的文本值,在添加它们之前需要将其转换为数字。我目前正在尝试做的是:
SELECT (case when pm."PS" is null then 0 else pm."PS" end) + (case when pm."PS-PREV1" is null then 0 else replace(pm."PS-PREV1", ',', '')::numeric end) AS "Sales"
FROM pm
示例数据:
PS
PS-PREV1
20000
null
30000
20,000
null
null
null
30,000
期望的输出:
output
20000
50000
0
30000
这只是返回第一列的值,而不在第二列中添加。我哪里错了?我是不是想多了?
你的代码应该可以工作,但是你可以把它写得更干净一点:
SELECT COALESCE(pm."PS",0)
+ COALESCE(replace(pm."PS-PREV1", ',', '')::numeric,0) AS "Sales"
FROM pm
已编辑以提供示例数据 我正在尝试创建一个计算列来计算其他 2 列的总和,这应该很容易。但是,两列中的某些值都是空值,因此我想使用 case 表达式将两列中的空值替换为 0,然后将结果值相加。另一个复杂因素是第二列包含带逗号的文本值,在添加它们之前需要将其转换为数字。我目前正在尝试做的是:
SELECT (case when pm."PS" is null then 0 else pm."PS" end) + (case when pm."PS-PREV1" is null then 0 else replace(pm."PS-PREV1", ',', '')::numeric end) AS "Sales"
FROM pm
示例数据:
PS | PS-PREV1 |
---|---|
20000 | null |
30000 | 20,000 |
null | null |
null | 30,000 |
期望的输出:
output |
---|
20000 |
50000 |
0 |
30000 |
这只是返回第一列的值,而不在第二列中添加。我哪里错了?我是不是想多了?
你的代码应该可以工作,但是你可以把它写得更干净一点:
SELECT COALESCE(pm."PS",0)
+ COALESCE(replace(pm."PS-PREV1", ',', '')::numeric,0) AS "Sales"
FROM pm