Retour au blog
juin 2020·1 min de lectureTraduit par IA
Langue:DeutschEnglishFrançaisÖsterreichischKlingonian Version originale: Deutsch

MySQL : afficher NULL comme 0

#coalesce#done#mysql#null#sql

Pour un petit projet, je devais additionner les valeurs d'une colonne dans MySQL et trier selon ces sommes. Quelque chose comme

SELECT ITEMS.id, SUM(VOTES.modificator) AS score
FROM items ITEMS
LEFT JOIN votes VOTES ON ITEMS.id = VOTES.item
GROUP BY ITEMS.id
ORDER BY score DESC

Mais : oh zut. Quand la table votes ne contient aucune entrée à joindre, la fonction arithmétique renvoie « null ». Or nous voulons trier selon le résultat de cette fonction. Et quelle valeur a null ? Dans mon cas, vraiment 0. Remplaçons donc null par 0, comme ceci :

SELECT ITEMS.id, COALESCE(SUM(VOTES.modificator), 0) AS score
FROM items ITEMS
LEFT JOIN votes VOTES ON ITEMS.id = VOTES.item
GROUP BY ITEMS.id
ORDER BY score DESC

Que fait exactement COALESCE ? En tout cas bien plus qu'une simple « conversion ». COALESCE prend un nombre quelconque de paramètres et renvoie le premier qui contient une valeur (donc qui n'est pas null).

COALESCE(NULL, NULL, 'Hallo', NULL, 'Elefant')

renvoie donc « Hallo ».

Dans notre cas, COALESCE renvoie donc la somme de VOTES.modificator, sauf si la « valeur » (volontairement entre guillemets, car NULL n'est justement PAS une valeur) est null. Nous obtenons alors 0, et nous remplaçons ainsi de fait le résultat de la fonction arithmétique.

Plus récentValider des adresses e-mailPlus ancienAlpha-Go