Datenbanken werden häufig zur Beantwortung der Frage „Wie häufig taucht ein bestimmter Datentyp in einer Tabelle auf?“ verwendet. So möchten Sie vielleicht wissen, wie viele Tiere Sie oder ein anderer Besitzer haben, oder verschiedene statistische Erhebungen zu Ihren Tieren machen.
Das Zählen aller vorhandenen Tiere entspricht der Frage
„Wie viele Datensätze sind in der Tabelle
haustier
vorhanden?“, denn es gibt
genau einen Datensatz pro Tier. COUNT(*)
zählt die Anzahl der Datensätze, d. h., die Abfrage zur
Zählung Ihrer Tiere sieht wie folgt aus:
mysql> SELECT COUNT(*) FROM haustier;
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+
Weiter oben haben Sie die Namen der Leute abgerufen, die Tiere
besitzen. Mit COUNT()
können Sie etwa
ermitteln, wie viele Tiere jeder Besitzer hat:
mysql> SELECT besitzer, COUNT(*) FROM haustier GROUP BY besitzer;
+----------+----------+
| besitzer | COUNT(*) |
+----------+----------+
| Benny | 2 |
| Diane | 2 |
| Gwen | 3 |
| Harold | 2 |
+----------+----------+
Beachten Sie, dass GROUP BY
zur Gruppierung
aller Datensätze für jeden Besitzer
besitzer
verwendet wird. Ohne diese Klausel
erhalten Sie lediglich eine Fehlermeldung:
mysql> SELECT besitzer, COUNT(*) FROM haustier;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
with no GROUP columns is illegal if there is no GROUP BY clause
COUNT()
und GROUP BY
sind praktisch, wenn Sie Ihre Daten auf verschiedene Arten
charakterisieren wollen. Die folgenden Beispiele zeigen
verschiedene Wege, statistische Daten zu den Tieren zu
erheben.
Anzahl der Exemplare je Tierart:
mysql> SELECT gattung, COUNT(*) FROM haustier GROUP BY gattung;
+----------+----------+
| gattung | COUNT(*) |
+----------+----------+
| Vogel | 2 |
| Katze | 2 |
| Hund | 3 |
| Hamster | 1 |
| Schlange | 1 |
+----------+----------+
Anzahl der Tiere je Geschlecht:
mysql> SELECT geschlecht, COUNT(*) FROM haustier GROUP BY geschlecht;
+------------+----------+
| geschlecht | COUNT(*) |
+------------+----------+
| NULL | 1 |
| w | 4 |
| m | 4 |
+------------+----------+
(In dieser Ausgabe gibt NULL
an, dass das
Geschlecht unbekannt ist.)
Anzahl der Tiere je Kombination von Tierart und Geschlecht:
mysql> SELECT gattung, geschlecht, COUNT(*) FROM haustier GROUP BY gattung, geschlecht;
+----------+------------+----------+
| gattung | geschlecht | COUNT(*) |
+----------+------------+----------+
| Vogel | NULL | 1 |
| Vogel | w | 1 |
| Katze | w | 1 |
| Katze | m | 1 |
| Hund | w | 1 |
| Hund | m | 2 |
| Hamster | w | 1 |
| Schlange | m | 1 |
+----------+------------+----------+
Wenn Sie COUNT()
verwenden, müssen Sie
nicht die gesamte Tabelle abrufen. Die obige Abfrage
beispielsweise sieht wie folgt aus, wenn Sie nur für Hunde
und Katzen durchgeführt wird:
mysql>SELECT gattung, geschlecht, COUNT(*) FROM haustier
->WHERE gattung = 'Hund' OR gattung = 'Katze'
->GROUP BY gattung, geschlecht;
+---------+------------+----------+ | gattung | geschlecht | COUNT(*) | +---------+------------+----------+ | Katze | w | 1 | | Katze | m | 1 | | Hund | w | 1 | | Hund | m | 2 | +---------+------------+----------+
Oder, wenn Sie die Anzahl der Tiere je Geschlecht nur für diejenigen Tiere anzeigen wollen, deren Geschlecht auch bekannt ist:
mysql>SELECT gattung, geschlecht, COUNT(*) FROM haustier
->WHERE geschlecht IS NOT NULL
->GROUP BY gattung, geschlecht;
+----------+------------+----------+ | gattung | geschlecht | COUNT(*) | +----------+------------+----------+ | Vogel | w | 1 | | Katze | w | 1 | | Katze | m | 1 | | Hund | w | 1 | | Hund | m | 2 | | Hamster | w | 1 | | Schlange | m | 1 | +----------+------------+----------+
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.