Dans PostgreSQL, la fonction COALESCE retourne le premier argument non nul. Elle est généralement utilisée avec l’instruction SELECT pour gérer efficacement les valeurs nulles.

Syntax: COALESCE (argument_1, argument_2, …);

La fonction COALESCE accepte un nombre illimité d’arguments. Elle renvoie le premier argument qui n’est pas nul. Si tous les arguments sont nuls, la fonction COALESCE renvoie null. a fonction COALESCE évalue les arguments de gauche à droite jusqu’à ce qu’elle trouve le premier argument non nul. Tous les autres arguments à partir du premier argument non nul ne sont pas évalués.

Exemple:
Pour les besoins de la démonstration, créons d’abord une table (disons, items) en utilisant l’instruction ci-dessous:

CREATE TABLE items ( ID serial PRIMARY KEY, product VARCHAR (100) NOT NULL, price NUMERIC NOT NULL, discount NUMERIC);

Il y a quatre champs dans la items table:

  • id : la clé primaire qui identifie l’élément dans la table des éléments.
  • produit : le nom du produit.
  • prix : le prix du produit.
  • remise : la remise du produit.

Maintenant, nous insérons quelques enregistrements dans la table items en utilisant l’instruction INSERT comme suit :

INSERT INTO items (product, price, discount)VALUES ('A', 1000, 10), ('B', 1500, 20), ('C', 800, 5), ('D', 500, NULL);

Enfin, nous interrogeons les prix nets des produits en utilisant ce qui suit :

SELECT product, (price - discount) AS net_priceFROM items;

Cela donnera ce qui suit :

si vous regardez la quatrième ligne, vous remarquerez que le prix net du produit D est nul, ce qui ne semble pas correct. Le problème est que la remise du produit D est nulle, donc lorsque nous prenons la valeur nulle pour calculer le prix net, PostgreSQL renvoie null. Pour obtenir le bon prix, nous devons supposer que si la remise est nulle, elle est égale à zéro. Nous pouvons alors utiliser la fonction COALESCE comme suit :

SELECT product, (price - COALESCE(discount, 0)) AS net_priceFROM items;

Sortie:

Étiquettes d’article :

admin

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

lg