0Pricing
SQL Academy · Lektion

Eindeutige Werte zählen

COUNT(DISTINCT ...) in der Praxis

Eindeutige Werte zählen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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 SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum eindeutige Werte zählen?

Wenn Sie COUNT(*) verwenden, zählen Sie jede Zeile – einschließlich Duplikaten. Manchmal möchten Sie jedoch nur wissen, wie viele eindeutige Werte in einer Spalte vorhanden sind.

Zum Beispiel: Aus wie vielen verschiedenen Ländern kommen Ihre Kunden? Wie viele eindeutige Produkte wurden im letzten Monat bestellt? Hier kommt COUNT(DISTINCT ...) zum Einsatz.

Beispieltabelle erstellen

Erstellen Sie eine orders-Tabelle zum Üben. Jede Bestellung enthält einen Kundennamen, ein Produkt und ein Land.

Beachten Sie, dass einige Kunden und Länder mehr als einmal vorkommen. Das ist beabsichtigt, damit Sie den Unterschied zwischen dem Zählen aller Zeilen und dem Zählen eindeutiger Werte erkennen können.

CREATE TABLE orders (
  id INT,
  customer VARCHAR(50),
  product VARCHAR(50),
  country VARCHAR(50)
);

INSERT INTO orders VALUES
  (1, 'Alice', 'Laptop', 'USA'),
  (2, 'Bob', 'Phone', 'UK'),
  (3, 'Alice', 'Tablet', 'USA'),
  (4, 'Carol', 'Laptop', 'Canada'),
  (5, 'Bob', 'Laptop', 'UK'),
  (6, 'Dave', 'Phone', 'USA'),
  (7, 'Carol', 'Phone', 'Canada'),
  (8, 'Eve', 'Tablet', 'Germany');

COUNT(*) vs COUNT(DISTINCT)

Führen Sie beide Abfragen aus und vergleichen Sie die Ergebnisse. COUNT(*) gibt 8 zurück – eine Zeile für jede Zeile. COUNT(DISTINCT customer) gibt 5 zurück, da es nur 5 eindeutige Kunden gibt (Alice, Bob, Carol, Dave, Eve).

Das ist die zentrale Idee: COUNT(DISTINCT column) ignoriert wiederholte Werte und zählt nur eindeutige Werte.

SELECT COUNT(*) AS total_orders,
       COUNT(DISTINCT customer) AS unique_customers
FROM orders;

Eindeutige Länder zählen

Ermitteln Sie, aus wie vielen verschiedenen Ländern unsere Kunden kommen. Obwohl die orders-Tabelle 8 Zeilen enthält, haben mehrere Zeilen dasselbe Land.

Das Ergebnis ist 4 – USA, UK, Kanada und Deutschland –, unabhängig davon, wie oft jedes Land vorkommt.

SELECT COUNT(DISTINCT country) AS unique_countries
FROM orders;

Eindeutige Produkte zählen

Dasselbe Muster können Sie auf jede Spalte anwenden. Hier zählen wir, wie viele verschiedene Produkte bestellt wurden.

Obwohl „Laptop“ dreimal und „Phone“ dreimal vorkommt, wird jedes Produkt nur einmal gezählt. Die Antwort lautet 3: Laptop, Phone, Tablet.

SELECT COUNT(DISTINCT product) AS unique_products
FROM orders;

COUNT(DISTINCT) mit WHERE verwenden

Sie können COUNT(DISTINCT ...) mit einer WHERE-Klausel kombinieren, um die Zeilen vor dem Zählen einzuschränken. Hier zählen wir die eindeutigen Produkte, die ausschließlich von Kunden aus den USA bestellt wurden.

Es werden nur Zeilen berücksichtigt, für die country = 'USA' gilt. Anschließend zählen wir die eindeutigen Produkte in diesen Zeilen.

SELECT COUNT(DISTINCT product) AS usa_unique_products
FROM orders
WHERE country = 'USA';

COUNT(DISTINCT) mit GROUP BY

In Kombination mit GROUP BY liefert COUNT(DISTINCT ...) eindeutige Anzahlen pro Gruppe. Diese Abfrage beantwortet die Frage: Wie viele eindeutige Kunden haben in jedem Land Bestellungen aufgegeben?

Jede Gruppe wird unabhängig verarbeitet, sodass Duplikate innerhalb einer Gruppe vor dem Zählen entfernt werden.

SELECT country,
       COUNT(DISTINCT customer) AS unique_customers
FROM orders
GROUP BY country
ORDER BY unique_customers DESC;

Eindeutige Werte in mehreren Spalten zählen

Sie können mehrere Ausdrücke mit COUNT(DISTINCT ...) in derselben SELECT-Abfrage verwenden. So erhalten Sie in einer einzigen Abfrage schnell einen Überblick über die Kardinalität – also darüber, wie viele eindeutige Werte jede Spalte enthält.

Die Kardinalität ist eine nützliche Kennzahl bei der Untersuchung eines neuen Datensatzes.

SELECT COUNT(DISTINCT customer) AS unique_customers,
       COUNT(DISTINCT product)  AS unique_products,
       COUNT(DISTINCT country)  AS unique_countries
FROM orders;

Behandlung von NULL

Genau wie das normale COUNT(column) ignoriert COUNT(DISTINCT column) NULL-Werte. Ein NULL-Wert wird nicht als eindeutiger Wert gezählt.

In diesem Beispiel enthalten zwei Zeilen ein NULL-Land. Das Ergebnis sind weiterhin 4 eindeutige Werte für nicht NULLe Länder, nicht 5.

INSERT INTO orders VALUES
  (9,  'Frank', 'Phone',  NULL),
  (10, 'Grace', 'Laptop', NULL);

SELECT COUNT(DISTINCT country) AS unique_countries_no_null
FROM orders;

COUNT(*), COUNT(col) und COUNT(DISTINCT col) vergleichen

Es ist hilfreich, alle drei COUNT-Formen direkt nebeneinander zu sehen:

  • COUNT(*) – zählt jede Zeile einschließlich NULL-Werten
  • COUNT(country) – zählt Zeilen, in denen country nicht NULL ist
  • COUNT(DISTINCT country) – zählt eindeutige, nicht NULLe country-Werte

Führen Sie dies für die aktualisierte Tabelle aus (jetzt 10 Zeilen, davon 2 mit einem NULL-Land), um die Unterschiede zu bestätigen.

SELECT COUNT(*)                AS total_rows,
       COUNT(country)          AS non_null_countries,
       COUNT(DISTINCT country) AS unique_countries
FROM orders;

Praxisbeispiel: Täglich aktive Nutzer

Eine der häufigsten Anwendungen von COUNT(DISTINCT ...) in der Datenanalyse ist das Zählen der täglich aktiven Nutzer (Daily Active Users, DAU). Sie verfügen über ein Ereignisprotokoll und möchten wissen, wie viele eindeutige Nutzer an jedem Tag aktiv waren.

Gruppieren Sie nach dem Datum mit GROUP BY und verwenden Sie COUNT(DISTINCT user_id), um die Anzahl eindeutiger Nutzer pro Tag zu erhalten. Duplikate desselben Nutzers, der mehrfach klickt, werden automatisch ausgeschlossen.

CREATE TABLE user_events (
  event_date DATE,
  user_id    INT
);

INSERT INTO user_events VALUES
  ('2024-01-01', 1), ('2024-01-01', 2), ('2024-01-01', 1),
  ('2024-01-02', 2), ('2024-01-02', 3), ('2024-01-02', 2),
  ('2024-01-03', 1), ('2024-01-03', 4);

SELECT event_date,
       COUNT(DISTINCT user_id) AS daily_active_users
FROM user_events
GROUP BY event_date
ORDER BY event_date;

Kurzer Test

Testen Sie Ihr Verständnis von COUNT(DISTINCT ...) mit dieser Frage.

Zusammenfassung der Lektion

Sehr gute Arbeit! Hier ist eine Zusammenfassung dessen, was Sie über COUNT(DISTINCT ...) gelernt haben:

  • COUNT(DISTINCT column) zählt nur eindeutige, nicht NULLe Werte in einer Spalte.
  • Es unterscheidet sich von COUNT(*) (alle Zeilen) und COUNT(column) (nicht NULLe Zeilen).
  • Es funktioniert mit WHERE, um Zeilen vor dem Zählen zu filtern.
  • Es funktioniert mit GROUP BY, um eindeutige Werte pro Gruppe zu zählen.
  • NULL-Werte werden bei der Zählung eindeutiger Werte immer ausgeschlossen.
  • Mehrere Ausdrücke mit COUNT(DISTINCT ...) können in derselben SELECT-Abfrage vorkommen.
  • Zu den häufigen Anwendungen in der Praxis gehören das Zählen eindeutiger Nutzer, Produkte, Länder und Sitzungen.

Wenn Sie diese Funktion beherrschen, verfügen Sie über ein leistungsstarkes Werkzeug zur Datenexploration und -analyse.

Häufig gestellte Fragen

Ist die Lektion „Eindeutige Werte zählen“ kostenlos?

Ja — der vollständige Text von „Eindeutige Werte zählen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Eindeutige Werte zählen“?

COUNT(DISTINCT ...) in der Praxis Du übst SQL Academy 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 SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy 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 4 von 4.

Wie lange dauert die Lektion „Eindeutige Werte zählen“?

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 SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-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. Grundlagen von SELECT DISTINCT
  2. DISTINCT für mehrere Spalten
  3. PostgreSQL DISTINCT ON
  4. Eindeutige Werte zählen
← Zurück zu SQL Academy