- Dynamic Sidebar mit window.COURSES_MANIFEST für 13 Kurse (216 Kapitel) - Kurswechsler Dropdown mit Direktnavigation - Fortschrittsanzeige mit Solved-Checkmarks (✓) aus localStorage - Responsive Off-Canvas Drawer mit Floating Action Button (☰ Kapitel) & Backdrop auf Mobile/Tablets - Web-IDE Topbar Drawer-Button (☰ Kapitel) für unterbrechungsfreien Vollbild-Editor - Saubere Bereinigung redundanter statischer Legacy-Sidebars |
||
|---|---|---|
| .. | ||
| aufgabe.sql | ||
| index.html | ||
| musterloesung.sql | ||
| README.md | ||
| test_aufgabe.sql | ||
SQL 09: Aggregationen (COUNT/SUM) & GROUP BY 📊
Willkommen zu Modul 09 (Lehrpfad 3: Aggregationen, CTEs & Window Functions)! In diesem Modul meisterst du das Fundament moderner Data Analytics & Business Intelligence: Das Zusammenfassen von Einzeltransaktionen zu wertvollen Geschäftskennzahlen.
🎯 Lernziele
- Aggregatfunktionen: Zeilenübergreifende Berechnungen mit
COUNT(*),COUNT(DISTINCT ...),SUM(),AVG(),MIN()undMAX(). GROUP BY: Gruppieren von Rohdaten nach Kategorien, Kunden, Zeiträumen und Regionen.HAVINGvs.WHERE: Verstehen des kritischen Unterschieds zwischen Zeilenfiltern (vor der Aggregation) und Gruppenfiltern (nach der Aggregation).- Multi-Column Grouping: Mehrdimensionale Analysen über mehrere Dimensionen (z.B. Stadt + Produktkategorie).
- Zeit-Aggregation: Aggregieren von Transaktionsdaten nach Monaten mit
strftime('%Y-%m', datum).
💡 Kernkonzepte & Syntax
1. Zeilen filtern vs. Gruppen filtern (WHERE vs. HAVING)
Ein häufiger Denkfehler in SQL ist die Verwendung von Aggregaten in der WHERE-Klausel. Dies führt zu einem Syntaxfehler!
WHERE: Filtert Zeilen bevor gruppiert wird. (z.B.WHERE status = 'abgeschlossen')GROUP BY: Fasst gleiche Werte in Gruppen zusammen. (z.B.GROUP BY kunde_id)HAVING: Filtert die aggregierten Gruppen nach der Berechnung. (z.B.HAVING SUM(gesamtbetrag) > 1000)
SELECT
k.stadt,
COUNT(b.id) AS anzahl_bestellungen,
SUM(b.gesamtbetrag) AS umsatz_stadt
FROM kunden k
JOIN bestellungen b ON k.id = b.kunde_id
WHERE b.status = 'abgeschlossen'
GROUP BY k.stadt
HAVING SUM(b.gesamtbetrag) >= 500
ORDER BY umsatz_stadt DESC;
🚀 Aufgabenstellung (aufgabe.sql)
- TODO 1: Kategorie-Umsatz-Statistik – Berechne pro Kategorie die Anzahl verkaufter Artikel, den Gesamtumsatz, den Durchschnittspreis sowie Min/Max-Preise.
- TODO 2: Top-Kunden mit HAVING – Identifiziere Kunden mit mindestens 2 abgeschlossenen Bestellungen und einem Gesamtwert von mindestens 500 €.
- TODO 3: Monatlicher Umsatz-Report – Gruppiere nach Monat (
strftime('%Y-%m', bestell_datum)), berechne Bestellanzahl, Monatsumsatz und AOV (Average Order Value). - TODO 4: Multi-Dimensionale Performance (Stadt & Kategorie) – Gruppiere nach Stadt und Kategorie, zähle eindeutige Bestellungen und summiere den Umsatz mit
HAVING SUM(gesamtbetrag) > 300.
🧪 Tests ausführen
Führe in der Web-IDE oder lokal deine Abfragen aus und validiere sie mit test_aufgabe.sql.