SUM und AVG mit NULL-Werten
Warum AVG NULL-Werte ignoriert und wie sich dadurch die erwartete Antwort im Interview ändert
SUM und AVG mit NULL-Werten ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Die versteckte Falle bei AVG
Hier ist ein Klassiker im Interview, an dem unachtsame Bewerber scheitern: „Sie haben eine Gehaltsspalte mit einigen NULLs. Was berechnet AVG(salary), und entspricht das dem, was das Unternehmen benötigt?“
Die ehrliche Antwort zeigt, ob Sie verstehen, dass Aggregatfunktionen NULLs ignorieren, wodurch sich der Nenner eines Durchschnitts ändert. Wenn Ihnen das in der Produktion falsch läuft, ist Ihr gemeldeter Durchschnitt unbemerkt zu hoch.
Machen wir dieses Verhalten eindeutig.
Beispieldaten
Verwenden Sie während der gesamten Lektion diese Tabelle employees mit einer Spalte bonus, die NULL-Werte enthalten kann:
- Alice, bonus 100
- Bob, bonus 200
- Carol, bonus NULL
- Dan, bonus 300
Vier Zeilen, drei Nicht-NULL-Boni und ein NULL-Wert. Wir führen SUM und AVG darauf aus und beobachten, wie NULL behandelt wird.
SUM ignoriert NULLs
SUM(bonus) addiert nur die Nicht-NULL-Werte: 100 + 200 + 300 = 600. Die Zeile mit NULL trägt nichts bei; sie wird einfach übersprungen und nicht als 0 behandelt, wodurch sich die Anzahl der Werte ändern würde.
Praktisch entspricht das der Behandlung von NULL als nicht vorhanden. SUM löst bei NULLs nie einen Fehler aus und gibt nur dann NULL zurück, wenn jede Eingabe NULL ist.
SELECT SUM(bonus) AS total_bonus
FROM employees;
-- returns 600AVG ignoriert ebenfalls NULLs
AVG(bonus) ist der entscheidende Fall. Es berechnet die Summe der Nicht-NULL-Werte geteilt durch die Anzahl der Nicht-NULL-Werte: 600 / 3 = 200.
Der Nenner ist 3 und nicht 4. Die Zeile mit NULL wird sowohl aus dem Zähler als auch aus dem Nenner ausgeschlossen. Genau deshalb kann AVG überraschen: Der Durchschnitt wird über vorhandene Werte gebildet, nicht über alle Zeilen.
SELECT AVG(bonus) AS avg_bonus
FROM employees;
-- 600 / 3 = 200, NOT 600 / 4 = 150Warum der Nenner wichtig ist
Angenommen, die geschäftliche Bedeutung eines NULL-Bonus lautet „kein Bonus erhalten“ = 0. Dann sollte der tatsächliche Durchschnitt 600 / 4 = 150 betragen, aber AVG(bonus) gibt 200 zurück.
Die richtige Antwort im Interview lautet: „AVG ignoriert NULLs und bildet daher den Durchschnitt über die Mitarbeitenden, die einen Bonus haben. Wenn NULL 0 bedeutet, muss ich NULLs zunächst in 0 umwandeln.“ Genau diese Unterscheidung zu benennen, bringt Ihnen den Punkt.
NULLs mit COALESCE in null umwandeln
Um den Durchschnitt über alle Zeilen zu bilden und NULL als 0 zu behandeln, schließen Sie die Spalte in COALESCE(bonus, 0) ein. Jetzt enthält jede Zeile einen numerischen Wert, sodass der Nenner 4 beträgt.
Das ergibt 600 / 4 = 150. Die Erkenntnis: AVG(col) und AVG(COALESCE(col, 0)) beantworten unterschiedliche geschäftliche Fragen. Treffen Sie diese Entscheidung bewusst.
SELECT AVG(COALESCE(bonus, 0)) AS avg_over_all
FROM employees;
-- 600 / 4 = 150AVG = SUM / COUNT – mit Bedacht
Eine nützliche Identität: AVG(col) entspricht SUM(col) / COUNT(col) — beachten Sie COUNT(col) und nicht COUNT(*), da sowohl AVG als auch dieser COUNT NULLs überspringen.
Wenn Sie irrtümlich SUM(col) / COUNT(*) schreiben, erhalten Sie den Durchschnitt über alle Zeilen (hier 150), der sich von AVG (200) unterscheidet. Interviewer bitten Sie manchmal, AVG manuell nachzubilden, um zu prüfen, ob Sie den richtigen COUNT auswählen.
SELECT
AVG(bonus) AS builtin_avg, -- 200
SUM(bonus) * 1.0 / COUNT(bonus) AS manual_avg, -- 200
SUM(bonus) * 1.0 / COUNT(*) AS over_all_rows -- 150
FROM employees;Fallstrick bei Ganzzahldivision
Beim manuellen Berechnen von Durchschnitten kann ein subtiler Fehler auftreten: In vielen Datenbanken führt die Division zweier Ganzzahlen zu einer Ganzzahldivision, bei der die Nachkommastellen abgeschnitten werden. 7 / 2 kann dann 3 statt 3,5 ergeben.
AVG gibt normalerweise eine Dezimalzahl zurück. Wenn Sie AVG jedoch mit SUM / COUNT für Ganzzahlspalten nachbilden, können Sie an Genauigkeit verlieren. Multiplizieren Sie zunächst mit 1.0 oder wandeln Sie den Wert in einen Dezimaldatentyp um.
SELECT
SUM(bonus) / COUNT(bonus) AS maybe_truncated,
SUM(bonus) * 1.0 / COUNT(bonus) AS precise
FROM employees;Wenn alles NULL ist
Ein Randfall, den Interviewer lieben: Was passiert, wenn jeder Wert NULL ist oder der Filter keine Zeilen trifft?
SUMgibt NULL zurück, wenn es keine Nicht-NULL-Eingaben gibt, nicht 0.AVGgibt ebenfalls NULL zurück, da eine Division durch eine Anzahl von null Werten nicht definiert ist.COUNTgibt dagegen 0 zurück.
Schließen Sie das Ergebnis in COALESCE(SUM(col), 0) ein, wenn Sie einen numerischen Standardwert benötigen.
SELECT COALESCE(SUM(bonus), 0) AS safe_total
FROM employees
WHERE 1 = 0; -- no rows: returns 0, not NULLDurchschnittswerte pro Gruppe
Dieselben NULL-Regeln gelten innerhalb von GROUP BY. Der AVG jeder Gruppe teilt durch die Anzahl der Nicht-NULL-Werte in dieser Gruppe. Eine Gruppe, deren Boni ausschließlich aus NULL bestehen, liefert für AVG den Wert NULL.
Wenn Sie also überraschende Durchschnittswerte pro Abteilung sehen, vermuten Sie zunächst NULLs, die die einzelnen Nenner verkleinern, bevor Sie einen Fehler in einem Join annehmen.
SELECT department, AVG(bonus) AS avg_bonus
FROM employees
GROUP BY department;So formulieren Sie die Antwort
Eine überzeugende Antwort im Interview klingt etwa so: „SUM und AVG ignorieren beide NULLs. AVG teilt durch die Anzahl der Nicht-NULL-Werte, daher verkleinern NULLs effektiv den Nenner. Wenn NULL als 0 zählen soll, wandle ich NULL mit COALESCE vor der Aggregation um; andernfalls bildet der Durchschnitt nur die Zeilen ab, die einen Wert enthalten.“
Dieser eine Satz zeigt fachliche Korrektheit, Verständnis für geschäftliche Zusammenhänge und die passende Lösung.
Kurzer Test
Wenden Sie die Regel auf die Beispieldaten an.
Zusammenfassung
Die wichtigsten Erkenntnisse zu SUM und AVG mit NULLs:
- Beide ignorieren NULLs vollständig.
AVG(col)=SUM(col) / COUNT(col)— der Nenner schließt NULLs aus.- Verwenden Sie
COALESCE(col, 0), wenn NULL 0 bedeutet und mitgezählt werden soll. - Eingaben, die vollständig aus NULL bestehen, oder Eingaben ohne Zeilen führen dazu, dass SUM und AVG NULL zurückgeben (COUNT gibt 0 zurück).
- Achten Sie auf Ganzzahldivision, wenn Sie AVG manuell nachbilden.
Als Nächstes: MIN, MAX und Aggregatfunktionen für nicht numerische Daten.
Häufig gestellte Fragen
Ist die Lektion „SUM und AVG mit NULL-Werten“ kostenlos?
Ja — der vollständige Text von „SUM und AVG mit NULL-Werten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „SUM und AVG mit NULL-Werten“?
Warum AVG NULL-Werte ignoriert und wie sich dadurch die erwartete Antwort im Interview ändert Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „SUM und AVG mit NULL-Werten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)
- SUM und AVG mit NULL-Werten
- MIN, MAX und Aggregation nichtnumerischer Werte
- Aggregatfunktionen ohne GROUP BY