Disons que j'ai une fonction simple dans MySQL:
SELECT SUM(Column_1)
FROM Table
WHERE Column_2 = 'Test'
Si aucune entrée dans Column_
2 ne contient le texte 'Test', cette fonction retourne NULL
, alors que je voudrais qu'elle renvoie 0.
Je suis conscient qu'une question similaire a été posée à quelques reprises ici, mais je n'ai pas été en mesure d'adapter les réponses à mes objectifs, alors je serais reconnaissant de l'aide pour faire ce tri.
Réponses:
Utilisez
COALESCE
pour éviter ce résultat.Pour le voir en action, veuillez consulter ce violon SQL: http://www.sqlfiddle.com/#!2/d1542/3/0
Plus d'information:
Étant donné trois tables (une avec tous les nombres, une avec tous les nuls et une avec un mélange):
Violon SQL
Configuration du schéma MySQL 5.5.32 :
Requête 1 :
Résultats :
la source
SUM
fonctionne comme vous le souhaitezAVG
etCOUNT
peut produire des résultats différents lors de la réception de l'NULL
invite à utiliserCOALESCE
comme suggéré par @DarkSide, en fonction du résultat souhaité.Utilisez
IFNULL
ouCOALESCE
:La différence entre eux est qu'il
IFNULL
s'agit d'une extension MySQL qui prend deux arguments etCOALESCE
est une fonction SQL standard qui peut prendre un ou plusieurs arguments. Lorsque vous n'avez que deux arguments, l'utilisationIFNULL
est légèrement plus rapide, bien qu'ici la différence soit insignifiante car elle n'est appelée qu'une seule fois.la source
IFNULL
ouCOALESCE
?? pouvez-vous l'expliquer ??coalesce
.Vous ne pouvez pas obtenir exactement ce que vous demandez, mais si vous utilisez une fonction SOMME d'agrégation qui implique que vous regroupez la table.
La requête va pour MYSQL comme ceci
la source