Welches Produkt bringt am meisten Geld?
Ein Bericht beantwortet eine Frage mit Zahlen, zum Beispiel: Wie viel Umsatz hat jedes Produkt gebracht? Mit SQL stellst du so eine Frage in wenigen Zeilen, und die Datenbank rechnet für dich.
Im Schulcafé will die Leitung nach einer Woche wissen, was sich lohnt. Niemand will dafür 16 Zeilen von Hand addieren, und schon gar nicht 4.000.
Am Ende dieser Lektion
Notiz
Ich kann eine Frage der Leitung mit einer SQL-Abfrage beantworten.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Bericht | eine Antwort auf eine Frage, in Zahlen | |
| Abfrage | eine Frage an die Datenbank, in SQL geschrieben | |
| Umsatz | das Geld, das durch Verkäufe hereinkommt | |
| Aggregatfunktion | rechnet viele Zeilen zu einer Zahl zusammen | SUM |
| Gruppe | alle Zeilen mit demselben Wert in einer Spalte | |
| Filter | eine Bedingung, die Zeilen behält oder aussortiert |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Aus der Frage wird eine Abfrage
Schreib die Frage zuerst als Satz. Suche darin drei Dinge: welche Zahl gesucht ist, wonach du sortierst und welche Zeilen überhaupt zählen.
Erst danach schreibst du SQL. So baust du die Abfrage Stück für Stück und rätst nicht.
Ein Beispiel: eine Frage in Teile zerlegen
| Teil der Frage | Gesucht ist | SQL |
|---|---|---|
| Wie viel Umsatz je Produkt? | Die Summe pro Produkt | SUM(...) und GROUP BY produkt |
| Nur ab dem 3. März? | Ein Filter auf die Zeilen | WHERE datum >= '2026-03-03' |
| Das größte zuerst? | Eine Reihenfolge | ORDER BY ... DESC |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Probier es: Stück je Produkt
-- Wie viele Stück wurden von jedem Produkt verkauft?
SELECT produkt, SUM(menge) AS stueck
FROM verkaeufe
GROUP BY produkt
ORDER BY stueck DESC;
-- Ändere SUM(menge) in COUNT(*) und starte noch einmal.
Aggregatfunktionen fassen viele Zeilen zusammen
Eine Aggregatfunktion rechnet viele Zeilen zu einer einzigen Zahl zusammen. Die wichtigsten vier stehen in der Tabelle.
Mit GROUP BY bildest du Gruppen. Die Funktion rechnet dann für jede Gruppe einzeln.
Ein Beispiel: die wichtigsten Funktionen
| Funktion | Sie liefert | Beispiel |
|---|---|---|
| COUNT(*) | die Zahl der Zeilen | COUNT(*) |
| SUM(spalte) | die Summe | SUM(menge) |
| AVG(spalte) | den Durchschnitt | AVG(preis_in_cent) |
| MIN und MAX | den kleinsten und größten Wert | MAX(menge) |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Geld rechnest du in Cent
Die Tabelle speichert den Preis in Cent: 90 steht für 0,90 Euro. So gibt es keine Rundungsfehler beim Addieren.
Für den Umsatz rechnest du menge * preis_in_cent. Erst am Ende teilst du durch 100,0 und bekommst Euro.
Probier es: Umsatz je Kategorie
-- Der Umsatz je Kategorie, erst in Cent, dann in Euro.
SELECT kategorie,
SUM(menge * preis_in_cent) AS umsatz_in_cent,
SUM(menge * preis_in_cent) / 100.0 AS umsatz_in_euro
FROM verkaeufe
GROUP BY kategorie
ORDER BY umsatz_in_cent DESC;
-- Füge vor GROUP BY die Zeile WHERE datum = '2026-03-02' ein.
Dieselben Fragen an eine größere Datenbank
Im Lab liegt die Datenbank shop mit 120 Bestellungen und 40 Kundinnen und Kunden. Drück oben in der Leiste auf Lab starten und öffne das Terminal.
Die ersten zwei Befehle richten die Verbindung ein. Alle weiteren stellen eine Frage und ändern nichts.
Das Zertifikat des Servers annehmen
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Abkürzung für die Verbindung
alias sql='mariadb -h db -u student -pstudent shop -t -e'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie viele Bestellungen hat jeder Status?
sql "SELECT status, COUNT(*) AS anzahl FROM orders GROUP BY status ORDER BY status"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Aus welchem Land kommt wie viel Kundschaft?
sql "SELECT country, COUNT(*) AS anzahl FROM customers GROUP BY country ORDER BY anzahl DESC, country"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie hoch ist die Summe aller Positionen?
sql "SELECT SUM(quantity * unit_price) AS umsatz FROM order_items"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
HAVING prüft Gruppen, WHERE prüft Zeilen
WHERE sortiert Zeilen aus, bevor gruppiert wird. HAVING prüft die Gruppen, nachdem die Funktion gerechnet hat.
Willst du nur Produkte mit mehr als 25 verkauften Stück, brauchst du HAVING SUM(menge) > 25. Die Summe gibt es erst nach dem Gruppieren.
Probier es: nur große Gruppen behalten
-- Nur Produkte, die insgesamt mehr als 25 Stück verkauft haben.
SELECT produkt, SUM(menge) AS stueck
FROM verkaeufe
GROUP BY produkt
HAVING SUM(menge) > 25
ORDER BY stueck DESC;
-- Ändere 25 in 40 und starte noch einmal.
Ein häufiger Fehler
Warnung
Viele denken, WHERE SUM(menge) > 25 sei dasselbe wie HAVING. Es ist ein Fehler, denn beim WHERE gibt es die Summe noch nicht. Nutze WHERE für einzelne Zeilen und HAVING für Gruppen.