Werte zählen
Statt des Sterns kannst du eine Spalte in die Klammern von COUNT schreiben. COUNT(spalte) zählt nicht Zeilen, sondern Werte: die Zeilen, in denen die Spalte nicht NULL ist. Zwei Kunden des Shops haben keine Stadt, also unterscheiden sich diese beiden Zahlen:
SELECT COUNT(*) AS alle_kunden,
COUNT(stadt) AS mit_stadt
FROM kunden;| alle_kunden | mit_stadt |
|---|---|
| 14 | 12 |
COUNT(*) zählt alle 14 Zeilen, COUNT(stadt) nur die 12, die eine Stadt haben. NULL bedeutet, dass es keinen Wert gibt, und wo es keinen Wert gibt, gibt es nichts zu zählen. Eine Spalte, die nie NULL ist, wie id, liefert dieselbe Zahl wie COUNT(*).
Um jeden Wert nur einmal zu zählen, schreibe DISTINCT in die Klammern, vor die Spalte. In wie vielen verschiedenen Städten wohnen die Kunden?
SELECT COUNT(DISTINCT stadt) AS staedte
FROM kunden;| staedte |
|---|
| 4 |
In vier. SELECT DISTINCT stadt FROM kunden; würde fünf Zeilen zeigen, weil NULL eine davon ist, aber COUNT(DISTINCT stadt) überspringt NULL, genau wie COUNT(stadt).
Typischer Fehler: COUNT(spalte), wo du Zeilen zählen willst. SELECT COUNT(erschienen) FROM spiele; sagt 18, obwohl der Shop 20 Spiele hat: Robot Rebellion und Mystery Manor sind noch nicht erschienen, also ist ihr erschienen NULL. Um Zeilen zu zählen, schreibe COUNT(*), und setze eine Spalte nur dann in die Klammern, wenn du die Zeilen auslassen willst, in denen sie NULL ist.
So schreibst du es:
Anweisungen
- 1
Wie viele Bewertungen gibt es, und wie viele davon haben einen Kommentar? Zeige beide Zahlen in einer Abfrage, in den Spalten
anzahl_bewertungenundmit_kommentar:anzahl_bewertungen mit_kommentar 25 15 - 2
Zähle darunter, wie viele verschiedene Kunden eine Bestellung aufgegeben haben (die Spalte
kunde_idvonbestellungen), in einer Spaltebestellende_kunden:bestellende_kunden 12 - 3
Und zähle in einer Abfrage die Zeilen von
positionenin einer Spalteanzahl_positionenund die verschiedenen Spiele darin in einer Spalteverschiedene_spiele:anzahl_positionen verschiedene_spiele 42 17