PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Renvoie zéro si aucun enregistrement n'est trouvé

Vous pourriez :

SELECT COALESCE(SUM(columnA), 0) FROM my_table WHERE columnB = 1
INTO res;

Cela fonctionne, car votre requête a une fonction d'agrégation et par conséquent toujours renvoie une ligne, même si rien n'est trouvé dans la table sous-jacente.

Les requêtes simples sans agrégat renverraient aucune ligne dans ce cas. COALESCE ne serait jamais appelé et ne pourrait pas te sauver. Tout en traitant une seule colonne, nous pouvons envelopper toute la requête à la place :

SELECT COALESCE( (SELECT columnA FROM my_table WHERE ID = 1), 0)
INTO res;

Fonctionne également pour votre requête d'origine :

SELECT COALESCE( (SELECT SUM(columnA) FROM my_table WHERE columnB = 1), 0)
INTO res;

En savoir plus sur COALESCE() dans le manuel.
Plus d'informations sur les fonctions d'agrégation dans le manuel.
Plus d'alternatives dans ce post ultérieur :

  • Comment renvoyer une valeur d'une fonction si aucune valeur n'est trouvée