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 correctement, sauf que les champs NULL devraient l'être 0
.
Comment puis-je retourner 0 pour NULL dans MySQL?
Vous pouvez utiliser
coalesce(column_name,0)
au lieu de simplementcolumn_name
. Lacoalesce
fonction renvoie la première valeur non NULL de la liste.Je dois mentionner que les fonctions par ligne comme celle-ci sont généralement problématiques pour l'évolutivité. Si vous pensez que votre base de données peut arriver à être 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 l'
select
auinsert/update
.Cela amortit le coût en supposant que votre base de données est lue plus souvent qu'écrite (et la plupart le sont).
la source
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:Par exemple dans une requête SELECT:
J'espère que cela peut aider quelqu'un à ne pas perdre de temps.
la source
Vous pouvez essayer quelque chose comme ça
L'attribut X est supposé vide s'il s'agit d'une chaîne vide, vous pouvez donc le déclarer comme un zéro au lieu de la dernière valeur. Dans un autre cas, il resterait sa valeur d'origine.
Quoi qu'il en soit, juste pour donner une autre façon de faire cela.
la source
Oui, la fonction IFNULL fonctionnera pour atteindre le résultat souhaité.
la source