Utilisation de COALESCE pour gérer les valeurs NULL dans PostgreSQL

J’ai la requête suivante

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; 

La requête ci-dessus renvoie l’o / p comme indiqué dans l’image jointe entrer la description de l'image ici

Cependant, je veux remplacer toutes les valeurs NULL par 0 en utilisant COALESCE. Faites-moi savoir comment cela peut être réalisé dans la requête SELECT ci-dessus.

Maintenant, j’ai modifié la requête en utilisant coalesce comme ci-dessous

 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 

le résultat est tel que joint à l’image 2.

Je reçois toujours une ligne avec des valeurs vierges

Vous pouvez utiliser COALESCE avec NULLIF pour une solution courte et efficace:

 COALESCE( NULLIF(yourField,'') , '0' ) 

La fonction NULLIF renverra null si yourField est égal à la seconde valeur ( '' dans ce cas), rendant la fonction COALESCE pleinement opérationnelle dans tous les cas:

  QUERY | RESULT --------------------------------------------------------------------------------- SELECT COALESCE(NULLIF(null ,''),'0') | '0' SELECT COALESCE(NULLIF('' ,''),'0') | '0' SELECT COALESCE(NULLIF('foo' ,''),'0') | 'foo' 

Si vous utilisez 0 et une chaîne vide '' et null pour désigner undefined, vous avez un problème de données. Mettez simplement à jour les colonnes et corrigez votre schéma.

 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 = ''; 

Cela permettra de rejoindre et de sélectionner considérablement plus facilement pour aller de l’avant.