CodeGym /Kurse /SQL SELF /Umgang mit NULL in Berechnungen mit COALESCE()

Umgang mit NULL in Berechnungen mit COALESCE()

SQL SELF
Level 9 , Lektion 3
Verfügbar

Heute tauchen wir wieder tiefer in das Thema NULL-Handling ein und lernen eine echt nützliche Funktion kennen – COALESCE(). Mit dieser Funktion kannst du ganz elegant mit NULL-Werten in deinen Daten umgehen.

Schau dir mal folgendes Beispiel an: Du hast eine Tabelle mit Infos über Mitarbeitende, aber bei manchen fehlt das Gehalt. Was passiert, wenn wir versuchen, alle Gehälter zu erhöhen? Nichts Gutes. Mit NULL kann man nämlich keine Berechnungen machen. Und was, wenn wir NULL-Gehälter einfach durch 0 ersetzen wollen? Hier kommt COALESCE() ins Spiel.

COALESCE() ist eine Funktion, die den ersten Wert, der nicht NULL ist, aus der übergebenen Argumentliste zurückgibt. Wenn alle Werte in der Liste NULL sind, gibt die Funktion NULL zurück. Einfach gesagt: Sie sagt quasi: "Gib mir bitte den ersten brauchbaren Wert, den du finden kannst!"

Syntax

COALESCE(value1, value2, ..., value_n)

value1, value2, ..., value_n sind die Argumente, die du der Funktion übergibst. Sie gibt den ersten Wert zurück, der nicht NULL ist.

Beispiele für COALESCE() in Aktion

Hier ein paar Beispiele.

Beispiel 1: NULL durch 0 ersetzen

Angenommen, wir haben eine Tabelle salaries:

id name salary
1 Otto 50000
2 Maria NULL
3 Alex 60000
4 Anna NULL

Wir wollen die Gesamtsumme der Gehälter berechnen – das ist easy:

SELECT SUM(salary) AS total_salary
FROM salaries;

Die Funktion SUM() ignoriert NULL, also kein Problem.

Aber dann wollen wir die Gesamtsumme berechnen, wenn wir jedem Mitarbeitenden einen Bonus von 1000 geben.

SELECT SUM(salary+1000) AS total_salary
FROM salaries;

Und jetzt wird das Ergebnis komisch. Am besten ist es, die NULL-Werte direkt mit COALESCE auf 0 zu setzen. So geht’s:

SELECT SUM(COALESCE(salary, 0)) AS total_salary
FROM salaries;

Ergebnis:

total_salary
110000

So ist das viel besser und sicherer.

Beispiel 2: NULL durch einen Standardwert ersetzen

Sagen wir, wir haben eine Tabelle students mit Namen und Adressen:

id name address
1 Anna Kanne
2 Peter NULL
3 Lisa Painful
4 Alex NULL

Wir wollen NULL in den Adressen durch "Nicht angegeben" ersetzen:

SELECT name, COALESCE(address, 'Nicht angegeben') AS resolved_address
FROM students;

Ergebnis der Abfrage:

name resolved_address
Anna Kanne
Peter Nicht angegeben
Lisa Painful
Alex Nicht angegeben

Beispiel 3: Mehrere Werte verwenden

Manchmal willst du NULL nicht nur durch einen Wert ersetzen, sondern eine ganze Reihe von Alternativen durchprobieren. Zum Beispiel: Wir wollen den Namen, den Spitznamen oder "Ohne Namen" nehmen, falls beides fehlt. Tabelle users:

user_id first_name short_name full_name
1 John Jonny Johnny Walker
2 NULL Pete Peter Kamen
3 NULL NULL

Abfrage:

SELECT user_id,
       COALESCE(first_name, short_name, 'Ohne Namen') AS display_name
FROM users;

Ergebnis:

user_id display_name
1 John
2 Pete
3 Ohne Namen

Praktische Anwendung von COALESCE()

In der Praxis ist COALESCE() echt ein Rettungsanker, wenn du mit nicht perfekten Daten arbeitest.

Schauen wir mal, wie sie bei verschiedenen Aufgaben hilft.

Beispiel 1: Werte in Textfeldern ersetzen

Original-Tabelle customers:

id name address
1 Alex Lin 123 Maple St
2 Maria Chi NULL
3 Anna Song 456 Oak Ave
4 Otto Art NULL
5 Liam Park 789 Pine Rd

Abfrage:

SELECT name, COALESCE(address, 'Nicht angegeben') AS address
FROM customers;

Ergebnis:

name address
Alex Lin 123 Maple St
Maria Chi Nicht angegeben
Anna Song 456 Oak Ave
Otto Art Nicht angegeben
Liam Park 789 Pine Rd

Beispiel 2: Daten für Reports vorbereiten

Original-Tabelle sales:

id product price
1 Widget A 100
2 Widget B NULL
3 Widget C 250
4 Widget D NULL
5 Widget E 300

Abfrage:

SELECT SUM(COALESCE(price, 0)) AS total_sales
FROM sales;

Ergebnis:

total_sales
650

Typische Fehler beim Einsatz von COALESCE()

Auch wenn COALESCE() einfach und universell wirkt, gibt’s ein paar Stolperfallen.

Datentypen nicht passend. Alle Argumente, die du an COALESCE() übergibst, müssen vom Datentyp her zusammenpassen. Zum Beispiel kannst du keine Strings und Zahlen mischen.

-- Fehler
SELECT COALESCE(salary, 'Nicht angegeben') FROM employees; 
-- salary ist ein Zahlenfeld, aber 'Nicht angegeben' ist ein Text.

Reihenfolge der Argumente ignorieren. COALESCE() gibt immer das erste nicht-NULL zurück, also ist die Reihenfolge der Argumente wichtig.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION