0Pricing
Coding Interview Prep · Lektion

COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)

Die klassische Frage dazu, wie die einzelnen COUNT-Formen mit NULL-Werten und Duplikaten umgehen

COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT) ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 1 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 Frage, die Ihnen gestellt wird

Wenn Sie sich einem SQL-Interview stellen, erwarten Sie diese Frage innerhalb der ersten zehn Minuten: Was ist der Unterschied zwischen COUNT(*), COUNT(column) und COUNT(DISTINCT column)?

Das wirkt trivial, aber Interviewer prüfen damit, ob Sie wirklich verstehen, wie Aggregatfunktionen NULL-Werte und Duplikate behandeln. Eine selbstbewusste, präzise Antwort zeigt, dass Sie echte Abfragen geschrieben und nicht nur Syntax auswendig gelernt haben.

In dieser Lektion entwickeln wir ein belastbares mentales Modell, damit Sie sofort antworten und das Warum erklären können.

COUNT(*) zählt Zeilen

COUNT(*) zählt Zeilen. Dabei werden überhaupt keine Spaltenwerte betrachtet, daher sind NULLs irrelevant. Wenn die Tabelle 100 Zeilen enthält, gibt COUNT(*) ohne Wenn und Aber 100 zurück.

Das Sternchen multipliziert oder erweitert hier keine Spalten. Es ist ein spezielles Token mit der Bedeutung „Zähle jede passende Zeile“. Diese Form verwenden Sie, wenn die Frage schlicht lautet: „Wie viele Datensätze gibt es?“

SELECT COUNT(*) AS total_rows
FROM employees;

Beispieldaten zum Nachvollziehen

Betrachten wir dazu eine kleine Tabelle. Stellen Sie sich eine Tabelle employees mit einer Spalte department vor, die NULL-Werte enthalten kann:

  • Alice, Sales
  • Bob, Sales
  • Carol, NULL
  • Dan, Engineering
  • Eve, NULL

Das sind insgesamt 5 Zeilen. Drei Zeilen enthalten einen Abteilungswert (Sales, Sales, Engineering), zwei Zeilen enthalten NULL. Merken Sie sich diese Zahlen; wir zählen diese Tabelle auf drei verschiedene Arten.

COUNT(column) überspringt NULLs

COUNT(column) zählt nur die Zeilen, in denen diese Spalte nicht NULL ist. NULL-Werte werden vollständig ignoriert.

Bei unseren Beispieldaten gibt COUNT(department) 3 und nicht 5 zurück, weil zwei Abteilungswerte NULL sind. Das ist die wichtigste Tatsache der gesamten Lektion: COUNT einer Spalte zählt niemals NULLs.

SELECT COUNT(department) AS depts_present
FROM employees;
-- returns 3 on our sample data

Die beiden bisherigen Varianten im Vergleich

Direkt nebeneinander in derselben Tabelle mit 5 Zeilen:

  • COUNT(*) = 5 (jede Zeile)
  • COUNT(department) = 3 (Abteilungen, die nicht NULL sind)

Die Differenz zwischen beiden, 5 minus 3, entspricht der Anzahl der Abteilungen mit NULL. Ein praktischer Trick im Interview: COUNT(*) - COUNT(col) liefert die Anzahl der NULLs in dieser Spalte, ohne eine separate WHERE-Klausel zu schreiben.

SELECT COUNT(*) - COUNT(department) AS null_departments
FROM employees;
-- returns 2

COUNT(DISTINCT column)

COUNT(DISTINCT column) zählt die Anzahl der eindeutigen Nicht-NULL-Werte. Zuerst werden Duplikate entfernt, anschließend NULLs ignoriert und dann die verbleibenden Werte gezählt.

In unseren Daten sind die unterschiedlichen Werte aus department Sales und Engineering. Daher gibt COUNT(DISTINCT department) 2 zurück. Die beiden NULLs werden nicht gezählt, und das doppelte Sales wird zu einem Wert zusammengefasst.

SELECT COUNT(DISTINCT department) AS unique_depts
FROM employees;
-- returns 2

Alle drei Varianten zusammen

Das vollständige Bild für unsere Tabelle mit 5 Zeilen:

  • COUNT(*) = 5 — Zeilen
  • COUNT(department) = 3 — Nicht-NULL-Werte
  • COUNT(DISTINCT department) = 2 — eindeutige Nicht-NULL-Werte

Wenn Sie diese Reihenfolge aufsagen können – zuerst NULL-bewusst, dann duplikatbewusst –, beherrschen Sie das gesamte Konzept. Beachten Sie, dass jede Form einen Wert zurückgibt, der kleiner oder gleich dem Wert der darüberstehenden Form ist.

SELECT
  COUNT(*)                       AS rows_total,
  COUNT(department)              AS depts_present,
  COUNT(DISTINCT department)     AS unique_depts
FROM employees;

Eine ausgearbeitete Interviewvariante

Interviewer formulieren die Frage oft etwas ausführlicher: „Wie viele Mitarbeitende sind einer Abteilung zugeordnet, und wie viele unterschiedliche Abteilungen gibt es?“

Der erste Teil entspricht COUNT(department) (zugeordnet bedeutet: nicht NULL). Der zweite Teil entspricht COUNT(DISTINCT department). Zu erkennen, welche COUNT-Variante zu welcher Formulierung gehört, ist genau die Fähigkeit, die hier geprüft wird.

SELECT
  COUNT(department)          AS assigned_employees,
  COUNT(DISTINCT department) AS distinct_departments
FROM employees;

COUNT mit einer Bedingung

Eine häufige Anschlussfrage lautet: Zählen Sie nur Zeilen, die eine Bedingung erfüllen. Ein sauberer, portabler Trick besteht darin, COUNT über einen CASE-Ausdruck auszuführen. Da COUNT(column) NULLs überspringt, lassen Sie CASE für die auszuschließenden Zeilen NULL zurückgeben.

Hier zählen wir Mitarbeitende aus Sales. CASE liefert nur für Sales-Zeilen einen Wert und ansonsten NULL, sodass COUNT ausschließlich diese Zeilen zählt.

SELECT
  COUNT(CASE WHEN department = 'Sales' THEN 1 END) AS sales_count
FROM employees;
-- returns 2

Häufige Fehler, die Sie vermeiden sollten

Achten Sie auf diese Fallen, die Interviewer gerne einbauen:

  • Die Annahme, dass COUNT(column) gleich COUNT(*) ist — das gilt nur, wenn die Spalte keine NULLs enthält.
  • Die Annahme, dass COUNT(DISTINCT col) NULL als einen eindeutigen Wert einschließt — das tut es nicht.
  • COUNT(1) in der Erwartung zu schreiben, dass NULLs übersprungen werden — es verhält sich wie COUNT(*) und zählt alle Zeilen.

Nennen Sie diese Punkte im Interview von sich aus, um Ihre fundierten Kenntnisse zu zeigen.

COUNT(1) und COUNT(constant)

Bewerber fragen oft, was schneller ist: COUNT(*) oder COUNT(1). Die Antwort lautet: Beide sind semantisch identisch — sie zählen unabhängig von NULLs jede Zeile — und moderne Optimierer behandeln sie gleich. Daher gibt es keinen wirklichen Leistungsunterschied.

Die Konstante innerhalb von COUNT(1) ist niemals NULL, daher wird keine Zeile übersprungen. Bevorzugen Sie aus Gründen der Klarheit COUNT(*); das ist die idiomatische Form.

SELECT COUNT(*) AS a, COUNT(1) AS b
FROM employees;
-- a and b are always equal

Kurzer Test

Testen Sie Ihr mentales Modell anhand der Beispieltabelle.

Zusammenfassung

Sie beherrschen jetzt die am häufigsten gestellte Frage zu Aggregatfunktionen:

  • COUNT(*) zählt jede Zeile, einschließlich NULLs.
  • COUNT(column) zählt nur Nicht-NULL-Werte.
  • COUNT(DISTINCT column) zählt eindeutige Nicht-NULL-Werte.
  • COUNT(*) - COUNT(col) liefert die Anzahl der NULLs ohne zusätzlichen Aufwand.
  • COUNT(1) entspricht COUNT(*) — NULLs werden nicht übersprungen, und es gibt keinen Geschwindigkeitsunterschied.

Formulieren Sie es präzise und begründen Sie es. Als Nächstes geht es darum, wie SUM und AVG mit NULLs umgehen.

Häufig gestellte Fragen

Ist die Lektion „COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)“ kostenlos?

Ja — der vollständige Text von „COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)“ 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 „COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)“?

Die klassische Frage dazu, wie die einzelnen COUNT-Formen mit NULL-Werten und Duplikaten umgehen 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 1 von 4.

Wie lange dauert die Lektion „COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)“?

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

  1. COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)
  2. SUM und AVG mit NULL-Werten
  3. MIN, MAX und Aggregation nichtnumerischer Werte
  4. Aggregatfunktionen ohne GROUP BY
← Zurück zu Coding Interview Prep