使用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所示。

我仍然收到一行空白值

您可以将COALESCENULLIF结合使用以获得简短有效的解决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更容易前进。