Monatsumsätze
Die Angebote gehen nächste Woche raus, und der Shop will wissen, wie seine Verkäufe jetzt laufen, damit er sie später vergleichen kann: der Umsatz jedes Monats.
Der Umsatz ist das Geld, das der Shop bekommen hat: für jede Position jeder bezahlten Bestellung die Menge mal der Preis. Nimm den Preis aus positionen, wo er das ist, was der Kunde wirklich bezahlt hat. Am Black Friday hat Bestellung 28 ihre Spiele günstiger bekommen, als spiele.preis sagt.
Um Bestellungen nach Monat zu gruppieren, brauchst du den Monat jeder Bestellung, und strftime() macht ihn aus dem Datum: strftime('%Y-%m', bestellt_am) ergibt das Jahr und den Monat, wie '2025-11', und strftime('%Y', bestellt_am) nur das Jahr:
SELECT id, bestellt_am,
strftime('%Y-%m', bestellt_am) AS monat,
strftime('%Y', bestellt_am) AS jahr
FROM bestellungen
WHERE id IN (4, 17, 28);| id | bestellt_am | monat | jahr |
|---|---|---|---|
| 4 | 2024-03-15 | 2024-03 | 2024 |
| 17 | 2025-03-03 | 2025-03 | 2025 |
| 28 | 2025-11-28 | 2025-11 | 2025 |
Gib so einer Spalte einen Alias, und du kannst sie in GROUP BY und ORDER BY verwenden. Monate in der Form 'YYYY-MM' sortieren sich in der Reihenfolge der Zeit, genau wie ganze Datumsangaben.
Typischer Fehler: Bestellungen mit COUNT(*) zu zählen. Nach dem Join mit positionen kommt jede Bestellung für jedes Spiel darin einmal vor, also zählt COUNT(*) Positionen, nicht Bestellungen. COUNT(DISTINCT b.id) zählt jede Bestellung einmal.
Und noch eine Falle: strftime() ergibt Text, vergleiche sein Ergebnis also mit Text, strftime('%Y', bestellt_am) = '2025'. Mit der Zahl 2025 ist die Bedingung nie wahr, weil SQLite eine Zahl und einen Text nicht für gleich hält.
So schreibst du es:
Anweisungen
- 1
Beginne unter dem Kommentar
-- 5. Monatsumsätzemit dem großen Bild, dem Umsatz jedes Jahres: die Spaltenjahr,anzahl_bestellungen(die Zahl der bezahlten Bestellungen) undumsatz, sortiert nach dem Jahr:jahr anzahl_bestellungen umsatz 2024 14 605 2025 14 595 - 2
Zeige darunter 2025 Monat für Monat: die Spalten
monat(als'YYYY-MM'),anzahl_bestellungenundumsatz, nur für die Bestellungen von 2025, sortiert nach dem Monat. Das Ergebnis beginnt so:monat anzahl_bestellungen umsatz 2025-02 1 35 2025-03 1 40 2025-04 1 40 … … …