MySQL Null als 0 ausgeben
Für ein kleines Projekt musste ich die Werte einer Spalte in MySQL summieren und nach den summierten Werten sortieren. Sowas wie
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
Aber: Oh shit. Wenn in der Votes-Tabelle kein zu verknüpfender Eintrag vorhanden ist, bekommen wir als Ergebnis für die arithmetische Funktion „null“ zurück. Wir wollen ha aber nach dem Ergebnis der arithmetischen Funktion sortieren. Und welchen Wert hat Null? - In meinem Falle tatsächlich 0. Also ersetzen wir Null mit 0 - und zwar so:
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
Was macht COALESCE genau? Auf jeden Fall mehr als stupides „umwandeln“. COALESCE gibt uns aus einer beliebigen Anzahl an Parametern genau den zurück, das als erster einen Wert enthält (also nicht null ist).
COALESCE(NULL, NULL, 'Hallo', NULL, 'Elefant')
gibt also „Hallo“ zurück.
In unserem Fall gibt COALESCE also die Summe aus VOTES.modificator zurück, es sein denn, der „Wert“ (bewusst in Anführungszeichen, da NULL natürlich gerade KEIN Wert ist) darin ist Null. Dann bekommen wir 0 zurückgegeben und ersetzen so faktisch das Ergebnis der arithmetischen Funktion.