Übung: Bestelldetails
Zeit, die ganze Lektion zusammenzufügen. Der Shop will die Details seiner Bestellungen sehen: was darin war, wer sie aufgegeben hat und auf wie viel sie sich beliefen. Jede Abfrage braucht mehrere Tabellen, und beim Schreiben hilft es, Schritt für Schritt vorzugehen:
- Welche Tabellen haben die Daten? Liste die Spalten auf, die du zeigen, nach denen du filtern und sortieren willst, und finde die Tabellen, in denen sie stehen.
- Wie hängen die Tabellen zusammen? Folge den Fremdschlüsseln: Jeder ist ein JOIN mit seinem ON. Führe die Abfrage nach jedem JOIN aus und sieh dir die Zeilen an: Ergibt ihre Anzahl Sinn?
- JOIN oder LEFT JOIN? Brauchst du die Zeilen ohne Gegenstück, etwa Kunden ohne Bestellung? Dann LEFT JOIN, und Bedingungen an seine rechte Tabelle gehören in ON.
- WHERE, GROUP BY, HAVING, ORDER BY funktionieren genau wie bei einer Tabelle, nur mit qualifizierten Namen. Sortiere mit einem zweiten Kriterium für gleiche Werte.
- Prüfe die Zahlen. Sind sie zu groß? Dann haben sich vielleicht Zeilen vervielfacht: Zähle mit COUNT(DISTINCT …).
Bestellsummen funktionieren wie der Umsatz: Jede Position hat p.menge * p.preis eingebracht, und die Summe einer Bestellung ist die Summe ihrer Positionen, du gruppierst also nach der Bestellung.
So schreibst du es:
Anweisungen
- 1
Die Quittungen von Sophie Arnold: Zeige jede Position jeder ihrer Bestellungen, mit der
bestellung_id, dembestellt_amder Bestellung, demtiteldes Spiels, dermenge, dempreis, den sie für ein Exemplar gezahlt hat, und dem Preis der ganzen Position (Menge mal Preis) alszwischensumme. Finde ihre Bestellungen über ihren Namen und sortiere die Zeilen nachbestellung_id, dann nachtitel:bestellung_id bestellt_am titel menge preis zwischensumme 23 2025-08-30 Word Quest 1 10 10 28 2025-11-28 Shadow Ninja 1 15 15 28 2025-11-28 Zombie Town 1 20 20 - 2
Zeige darunter die Summe jeder bezahlten Bestellung mit dem Namen ihres Kunden: die
bestellung_id, dasbestellt_am, dennamedes Kunden, die Anzahl der Exemplare in der Bestellung alsexemplareund die Summe alsgesamt. Sortiere die Bestellungen nachgesamtvom höchsten Wert, dann nachbestellung_id:bestellung_id bestellt_am name exemplare gesamt 11 2024-09-30 Lukas Neumann 2 85 14 2024-12-20 Emma Becker 2 75 5 2024-04-02 Noah Winter 2 65 10 2024-08-23 Leon Wagner 2 65 25 2025-10-10 Jonas Hartmann 2 65 … … … … … - 3
Schließlich will der Shop wissen, woher sein Geld kommt. Zeige für jede Stadt die Anzahl der bezahlten Bestellungen ihrer Kunden als
anzahl_bestellungenund ihren Umsatz alsumsatz. Die Kunden ohne Stadt kommen unter'unbekannt': Zeige die Stadt mitCOALESCEalsstadt. Vorsicht: Eine Bestellung kann mehrere Positionen haben, zähle die Bestellungen also so, dass jede nur einmal zählt. Sortiere die Städte nachumsatzvom höchsten Wert, dann nachstadt:stadt anzahl_bestellungen umsatz Hamburg 11 500 Leipzig 7 290 Dresden 4 210 Berlin 4 130 unbekannt 2 70