Die meistgewünschten Spiele
Die Wunschliste funktioniert, und die erste Frage des Shops lautet: Welche Spiele wollen die Kunden am meisten? Die Antwort hilft ihm, die Spiele für den nächsten Sale auszuwählen, und sie zeigt, wie groß das Interesse an Robot Rebellion und Mystery Manor ist, bevor sie erscheinen.
Das ist eine Frage für GROUP BY: eine Gruppe für jedes Spiel, und COUNT(*) zählt die Zeilen darin, also wie viele Kunden das Spiel auf ihrer Wunschliste haben. Die Wunschliste enthält nur IDs, verbinde sie also mit spiele, um die Titel zu bekommen, und gruppiere nach dem Spiel, GROUP BY s.id, s.titel.
Mehrere Spiele haben dieselbe Zahl von Wünschen. Um eine genaue Reihenfolge zu bekommen, sortiere zuerst nach der Zahl und dann nach dem Titel. In ORDER BY kannst du den Alias einer Spalte verwenden, etwa ORDER BY wuensche DESC.
Eine Zählung, die die Spiele weglässt, die sich niemand wünscht, erzählt nur die halbe Geschichte. Um auch diese Spiele zu behalten, beginne bei spiele und verwende LEFT JOIN: Ein Spiel ohne Wünsche bekommt dann eine Zeile, mit NULL in den Spalten der Wunschliste.
Typischer Fehler: COUNT(*) mit LEFT JOIN. Das Spiel ohne Wünsche hat immer noch diese eine Zeile, also ergibt COUNT(*) 1. Zähle stattdessen eine Spalte der verbundenen Tabelle: COUNT(spalte) überspringt NULL, also ergibt es 0. Hier der Unterschied bei der Anzahl der Bestellungen jedes Kunden:
SELECT k.name, COUNT(*) AS falsch, COUNT(b.id) AS anzahl_bestellungen
FROM kunden AS k
LEFT JOIN bestellungen AS b ON b.kunde_id = k.id
GROUP BY k.id, k.name
ORDER BY anzahl_bestellungen, k.name
LIMIT 3;| name | falsch | anzahl_bestellungen |
|---|---|---|
| Hannes Schulz | 1 | 0 |
| Max Krause | 1 | 0 |
| Ida Zimmermann | 1 | 1 |
Hannes Schulz und Max Krause haben noch nie bestellt, aber COUNT(*) gibt ihnen je 1 Bestellung.
So schreibst du es:
Anweisungen
- 1
Zeige unter dem Kommentar
-- 3. Die meistgewünschten Spiele, wie viele Kunden jedes Spiel auf ihrer Wunschliste haben: die Spaltentitelundwuensche, sortiert vom meistgewünschten Spiel an, und Spiele mit derselben Zahl nach dem Titel. Die ersten Zeilen:titel wuensche Knight's Oath 3 Robot Rebellion 3 Dragon Forge 2 Goal Rush 2 Mystery Manor 2 … … - 2
Ändere die Abfrage so, dass sie alle 20 Spiele zeigt, mit 0 für die Spiele, die sich niemand auf die Wunschliste gesetzt hat. Nach Zombie Town, dem letzten Spiel mit einem Wunsch, geht das Ergebnis so weiter:
titel wuensche … … Zombie Town 1 Bakery Story 0 Castle Siege 0 … …