使用COALESCE来处理PostgreSQL中的NULL值
我有以下查询
SELECT DISTINCT pt.incentive_marketing, pt.incentive_channel, pt.incentive_advertising FROM test.pricing pt WHERE pt.contract_id = 90000 group by 1,2,3 order by pt.incentive_marketing;
上面的查询返回o / p,如附图所示
不过,我想用COALESCEreplace所有null值请让我知道如何可以在上面的SELECT查询中实现
现在我进一步使用coalesce修改查询如下
SELECT COALESCE( pt.incentive_marketing, '0' ), COALESCE(pt.incentive_channel,'0'), COALESCE( pt.incentive_advertising,'0') FROM test.pricing pt WHERE pt.contract_id = 90000 group by 1,2,3
其结果如图2所示。
我仍然收到一行空白值
您可以将COALESCE
与NULLIF
结合使用以获得简短有效的解决scheme:
COALESCE( NULLIF(yourField,'') , '0' )
如果yourField等于第二个值(在本例中为''
), NULLIF
函数将返回null,使得COALESCE
函数在所有情况下都可以正常工作:
QUERY | RESULT --------------------------------------------------------------------------------- SELECT COALESCE(NULLIF(null ,''),'0') | '0' SELECT COALESCE(NULLIF('' ,''),'0') | '0' SELECT COALESCE(NULLIF('foo' ,''),'0') | 'foo'
如果你使用0
和一个空string''
, null
指定undefined,你有一个数据问题。 只需更新列并修复您的模式。
UPDATE pt.incentive_channel SET pt.incentive_marketing = NULL WHERE pt.incentive_marketing = ''; UPDATE pt.incentive_channel SET pt.incentive_advertising = NULL WHERE pt.incentive_marketing = ''; UPDATE pt.incentive_channel SET pt.incentive_channel = NULL WHERE pt.incentive_marketing = '';
这将使join和select更容易前进。