Die Funktion COUNT() ist eine der beliebtesten und nützlichsten Aggregatfunktionen in SQL. Ihre Hauptaufgabe ist es, die Anzahl der Zeilen im Ergebnis eines Queries zu zählen. Wenn COUNT() ein Superheld in der SQL-Welt wäre, dann wäre ihre Superkraft, blitzschnell Antworten auf Fragen wie diese zu finden:
- Wie viele Mitarbeiter arbeiten in der Firma?
- Wie viele Studierende gibt es an jeder Fakultät?
- Wie viele Produkte wurden im letzten Monat verkauft?
Die Syntax von COUNT() ist ziemlich einfach:
COUNT(spalte)
wobei spalte der Name der Spalte ist, deren Zeilen gezählt werden. Es gibt aber noch andere Varianten, die wir gleich in der Vorlesung anschauen.
Lass uns mit der grundlegendsten Nutzung von COUNT() starten.
Variante 1: Alle Zeilen zählen mit COUNT(*)
Wenn du jede Zeile in einer Tabelle zählen willst, egal ob sie Daten enthält oder nicht, benutzt du COUNT(*). Das Sternchen bedeutet „alle Spalten“.
Beispiel: Wir haben eine Tabelle students mit folgendem Inhalt:
| id | name | age |
|---|---|---|
| 1 | Otto | 20 |
| 2 | Maria | 22 |
| 3 | NULL | 19 |
| 4 | Anna | 21 |
Wir führen folgende Query aus:
SELECT COUNT(*)
FROM students;
Ergebnis:
| count |
|---|
| 4 |
Die Funktion COUNT(*) beachtet NULL-Werte in einzelnen Spalten nicht, weil sie einfach die Anzahl der Zeilen in der Tabelle zählt.
Variante 2: Zeilen mit vorhandenem Wert in einer Spalte zählen COUNT(column)
Aber was, wenn wir nur die Zeilen zählen wollen, wo ein nicht-NULL Wert in einer bestimmten Spalte steht? Dann benutzt man COUNT(column).
Beispiel: Lass uns zählen, wie viele Studierende einen Namen haben.
SELECT COUNT(name)
FROM students;
Ergebnis:
| count |
|---|
| 3 |
Merkst du den Unterschied? In der Tabelle gibt es 4 Zeilen, aber in einer davon ist die Spalte name NULL. Die Funktion COUNT(column) ignoriert Zeilen, wo der Wert in der Spalte NULL ist.
Vergleich COUNT(*) und COUNT(column)
Also, was ist genau der Unterschied zwischen den beiden Varianten: COUNT(*) und COUNT(column)?
COUNT(*)zählt alle Zeilen in der Tabelle, auch die mitNULLin irgendwelchen Spalten.COUNT(column)zählt nur die Zeilen, wo in der angegebenen Spalte der Wert nicht NULL ist.
Beispieltabelle:
| id | name | age |
|---|---|---|
| 1 | Otto | 20 |
| 2 | Maria | NULL |
| 3 | NULL | 19 |
| 4 | Anna | 21 |
Queries:
-- Zählt alle Zeilen.
SELECT COUNT(*) FROM students; -- 4 -- TOTAL (alle Zeilen)
-- Zählt nur die Zeilen, wo name nicht NULL ist.
SELECT COUNT(name) FROM students; -- 3 -- Zählen Zeilen mit angegebenem Namen
-- Zählt nur die Zeilen, wo age nicht NULL ist.
SELECT COUNT(age) FROM students; -- 3 -- Zählen Zeilen mit angegebenem Alter
Variante 3: Einzigartige Werte zählen mit COUNT(DISTINCT column)
Manchmal will man nur die einzigartigen Werte in einer Spalte zählen. Zum Beispiel: Wie viele verschiedene Altersangaben gibt es bei den Studierenden? Hier hilft COUNT(DISTINCT column).
Beispiel:
| id | name | age |
|---|---|---|
| 1 | Otto | 20 |
| 2 | Maria | NULL |
| 3 | NULL | 19 |
| 4 | Anna | 21 |
SELECT COUNT(DISTINCT age) FROM students;
Ergebnis:
| count |
|---|
| 3 |
Beachte, dass DISTINCT hier nicht nur Duplikate, sondern auch NULL-Werte ignoriert.
Wenn du versuchst, DISTINCT zusammen mit COUNT(*) zu benutzen, bekommst du einen Fehler: DISTINCT kann man nur auf bestimmte Spalten anwenden.
Beispiele für die Nutzung von COUNT() in echten Aufgaben
Beispiel 1. Anzahl der Studierenden zählen
| id | name | age |
|---|---|---|
| 1 | Otto | 20 |
| 2 | Maria | NULL |
| 3 | NULL | 19 |
| 4 | Anna | 21 |
SELECT COUNT(*) AS total_students
FROM students;
Ergebnis:
| total_students |
|---|
| 4 |
Beispiel 2. Studierende mit bekanntem Alter zählen
| id | name | age |
|---|---|---|
| 1 | Otto | 20 |
| 2 | Maria | NULL |
| 3 | NULL | 19 |
| 4 | Anna | 21 |
SELECT COUNT(age) AS students_with_age
FROM students;
Ergebnis:
| students_with_age |
|---|
| 3 |
Beispiel 3. Einzigartige Altersangaben zählen
| id | name | age |
|---|---|---|
| 1 | Otto | 20 |
| 2 | Maria | NULL |
| 3 | NULL | 19 |
| 4 | Anna | 20 |
SELECT COUNT(DISTINCT age) AS unique_ages
FROM students;
Ergebnis:
| unique_ages |
|---|
| 2 |
Typische Fehler bei der Nutzung von COUNT()
Zu erwarten, dass COUNT(column) alle Zeilen zählt, auch wenn es NULL gibt.
Das stimmt nicht: COUNT(column) ignoriert Zeilen mit NULL in der angegebenen Spalte.
Verwendung von COUNT(*) zum Zählen von einzigartigen Werten.
Benutze stattdessen COUNT(DISTINCT column).
Vergessen, beim Zählen bestimmte Daten zu filtern.
Zum Beispiel:
SELECT COUNT(*) FROM students WHERE age > 20;
Hier bekommst du nur die Studierenden, die älter als 20 sind, weil WHERE die Zeilen schon vor dem Zählen filtert.
Solche Feinheiten führen oft zu logischen Fehlern in Queries. Sei aufmerksam!
GO TO FULL VERSION