Retourne 0 si le champ est nul dans MySQL

Dans MySQL, existe-t-il un moyen de définir les champs “total” à zéro s’ils sont NULL?

Voici ce que j’ai:

SELECT uo.order_id, uo.order_total, uo.order_status, (SELECT SUM(uop.price * uop.qty) FROM uc_order_products uop WHERE uo.order_id = uop.order_id ) AS products_subtotal, (SELECT SUM(upr.amount) FROM uc_payment_receipts upr WHERE uo.order_id = upr.order_id ) AS payment_received, (SELECT SUM(uoli.amount) FROM uc_order_line_items uoli WHERE uo.order_id = uoli.order_id ) AS line_item_subtotal FROM uc_orders uo WHERE uo.order_status NOT IN ("future", "canceled") AND uo.uid = 4172; 

Les données sortent bien, sauf que les champs NULL doivent être 0 .

Comment puis-je retourner 0 pour NULL dans MySQL?

Utilisez IFNULL :

 IFNULL(expr1, 0) 

De la documentation:

Si expr1 n’est pas NULL, IFNULL () renvoie expr1; sinon, il retourne expr2. IFNULL () renvoie une valeur numérique ou une chaîne, selon le contexte dans lequel elle est utilisée.

Vous pouvez utiliser coalesce(column_name,0) au lieu de simplement column_name . La fonction de coalesce renvoie la première valeur non NULL dans la liste.

Je devrais mentionner que les fonctions par ligne comme celle-ci sont généralement problématiques pour l’évolutivité. Si vous pensez que votre firebase database peut avoir une taille décente, il est souvent préférable d’utiliser des colonnes et des déclencheurs supplémentaires pour déplacer le coût de la select vers l’ insert/update .

Cela amortit le coût en supposant que votre firebase database est lue plus souvent qu’écrite (et la plupart sont).

Vous pouvez essayer quelque chose comme ça

 IFNULL(NULLIF(X, '' ), 0) 

L’atsortingbut X est supposé être vide s’il s’agit d’une chaîne vide. Vous pouvez donc ensuite déclarer un zéro au lieu de la dernière valeur. Dans un autre cas, il restrait sa valeur initiale.

En tout cas, juste pour donner un autre moyen de le faire.

Oui, la fonction IFNULL fonctionnera pour obtenir le résultat souhaité.

 SELECT uo.order_id, uo.order_total, uo.order_status, (SELECT IFNULL(SUM(uop.price * uop.qty),0) FROM uc_order_products uop WHERE uo.order_id = uop.order_id ) AS products_subtotal, (SELECT IFNULL(SUM(upr.amount),0) FROM uc_payment_receipts upr WHERE uo.order_id = upr.order_id ) AS payment_received, (SELECT IFNULL(SUM(uoli.amount),0) FROM uc_order_line_items uoli WHERE uo.order_id = uoli.order_id ) AS line_item_subtotal FROM uc_orders uo WHERE uo.order_status NOT IN ("future", "canceled") AND uo.uid = 4172; 

Aucune des réponses ci-dessus n’était complète pour moi. Si votre champ est nommé field , le sélecteur doit être le suivant:

 IFNULL(`field`,0) AS field 

Par exemple dans une requête SELECT:

 SELECT IFNULL(`field`,0) AS field, `otherfield` FROM `mytable` 

J’espère que cela peut aider quelqu’un à ne pas perdre de temps.