Die besten Kunden
Die letzte Frage: Wer sind die besten Kunden des Shops? Der Shop möchte sich bei ihnen mit einem Geschenk bedanken und es anhand ihrer Wunschlisten auswählen. Er braucht also die Kunden, die in bezahlten Bestellungen am meisten ausgegeben haben, und wie viele Spiele jeder von ihnen auf der Wunschliste hat.
Die Werte einer Tabelle zu addieren und die Zeilen einer anderen in derselben Abfrage zu zählen, ist eine Falle. Wenn du wunschliste mit bestellungen und positionen verbindest, würde sich jede Position für jeden Wunsch des Kunden wiederholen, und SUM würde sie so oft addieren. Berechne also zuerst die Summen für sich und füge erst dann den Rest hinzu. Dafür ist WITH da: Es gibt dem Ergebnis einer Abfrage einen Namen, und die Hauptabfrage verwendet es wie eine Tabelle. Zum Beispiel die am besten bewerteten Spiele:
WITH durchschnitte AS (
SELECT spiel_id, AVG(sterne) AS durchschnitt
FROM bewertungen
GROUP BY spiel_id
)
SELECT s.titel, ROUND(d.durchschnitt, 1) AS durchschnitt
FROM durchschnitte AS d
JOIN spiele AS s ON s.id = d.spiel_id
ORDER BY d.durchschnitt DESC, s.titel
LIMIT 3;| titel | durchschnitt |
|---|---|
| Turbo Karts | 5.0 |
| Knight's Oath | 4.5 |
| Moon Farm | 4.5 |
Die Zahl der Wünsche kann aus einer korrelierten Unterabfrage in SELECT kommen, die die Zeilen des Kunden in wunschliste zählt, oder aus einem LEFT JOIN mit COUNT(w.spiel_id). So oder so muss ein Kunde mit leerer Wunschliste mit 0 in der Liste bleiben, ein einfacher JOIN mit der Wunschliste reicht also nicht.
Sobald diese Abfrage funktioniert, ist das Projekt fertig, und damit der ganze Kurs. Herzlichen Glückwunsch! Du bist weit gekommen seit deinem ersten SELECT * FROM spiele;: Allein in diesem Projekt hast du eine Tabelle entworfen, sie gefüllt und die Fragen des Shops mit Joins, Gruppierung, Unterabfragen und WITH beantwortet. Das ist das SQL, das Programmierer, Analysten und Data Scientists jeden Tag verwenden.
Wie geht es weiter? Ein paar Ideen:
- Übe mit eigenen Daten. SQLite ist kostenlos und läuft auf jedem Computer. Im kostenlosen Programm DB Browser for SQLite kannst du eine Datenbank erstellen, eine als CSV gespeicherte Tabelle importieren und ihr deine eigenen Fragen stellen.
- Andere Datenbanken. Was du gelernt hast, funktioniert auch in PostgreSQL, MySQL und SQL Server, mit kleinen Unterschieden: andere Typen (
VARCHAR,DATE,BOOLEAN), andere Datumsfunktionen stattstrftime()und anders geschriebene automatische IDs. PostgreSQL ist ein toller nächster Schritt. - Fensterfunktionen (
OVER,ROW_NUMBER,RANK). Sie rechnen über Zeilen hinweg, ohne sie zu gruppieren, zum Beispiel den Rang jedes Kunden oder eine laufende Summe des Umsatzes. - SQL in deinen Programmen. Apps schicken SQL aus dem Code an ihre Datenbank: in Python mit dem Modul
sqlite3, in JavaScript mit einer Bibliothek wiebetter-sqlite3oderpgfür PostgreSQL. Werte von Benutzern werden als Parameter übergeben, nie in den Text des SQL eingefügt, was die Datenbank vor SQL-Injection schützt.
Viel Erfolg und viel Freude mit deinen Abfragen!
So schreibst du es:
Anweisungen
- 1
Schreibe unter dem Kommentar
-- 6. Die besten Kundeneine Abfrage, die mitWITHbeginnt: ein Ergebnis mit dem Namenausgabenund den Spaltenkunde_idundausgegeben(die Summe aus Menge mal Preis der bezahlten Bestellungen des Kunden). Die Hauptabfrage verbindet es mitkundenund zeigt die fünf besten Kunden: die Spaltennameundausgegeben, sortiert von der höchsten Summe an, und Kunden mit derselben Summe nach dem Namen:name ausgegeben Emma Becker 200 Lukas Neumann 150 Noah Winter 150 Olivia Braun 150 Jonas Hartmann 95 - 2
Füge eine dritte Spalte hinzu,
wuensche: die Zahl der Spiele, die der Kunde auf der Wunschliste hat. Ein Kunde mit leerer Wunschliste bekommt 0:name ausgegeben wuensche Emma Becker 200 2 Lukas Neumann 150 2 Noah Winter 150 0 Olivia Braun 150 1 Jonas Hartmann 95 1