⬅ Zurück zur Übersicht

MySQL Null als 0 ausgeben

david am Samstag, 27.06.2020 - 22:06:32
⬅ Zurück zur Übersicht

Howdy.
Für mein kleines, aktuelles Projekt musste ich die Werte einer Spalte in MySQL summieren und nach den summierten Werten sortieren.
Sowas wie

1
2
3
4
5
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:

1
2
3
4
5
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).

1
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.

Kommentar schreiben

Kommentare