Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Daten mit COUNT und GROUP BY zusammenfassen

Nach dieser Lektion: Ich kann Daten mit COUNT, SUM und GROUP BY zusammenfassen.

Lektion, 50 Min.7 BefehleMySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Wie viele Karten hat jeder Film verkauft?

Die Kinochefin will am Montag wissen, welcher Film am meisten eingebracht hat. Sie braucht keine 2.000 einzelnen Karten, sondern eine kurze Liste.

Eine Datenbank zählt und addiert für dich. Mit GROUP BY macht sie das für jeden Film einzeln.

Am Ende dieser Lektion

Notiz

Ich kann Daten mit COUNT, SUM und GROUP BY zusammenfassen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Aggregatfunktionrechnet aus vielen Zeilen einen einzigen WertSUM
COUNTzählt Zeilen
Gruppealle Zeilen mit demselben Wert in einer Spalte
GROUP BYteilt die Zeilen in Gruppen und fasst jede zusammen
HAVINGbehält nur Gruppen, die eine Bedingung bestehen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Aggregatfunktion macht aus vielen Zeilen einen Wert

Fünf Funktionen brauchst du ständig. COUNT(*) zählt Zeilen. SUM(spalte) addiert, AVG(spalte) bildet den Durchschnitt. MIN und MAX finden den kleinsten und den größten Wert.

Eine solche Aggregatfunktion liefert eine einzige Zeile, auch wenn die Tabelle tausend hat.

Beispiel: vier Funktionen auf neun Karten

AbfrageErgebnis
COUNT(*)9
SUM(preis_euro)66
MIN(preis_euro)6
MAX(preis_euro)8

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Probier es: alle Karten zusammenfassen

Code: sql
-- Wie viele Karten wurden verkauft, und was brachten sie ein?
SELECT COUNT(*) AS karten, SUM(preis_euro) AS summe, AVG(preis_euro) AS schnitt
FROM tickets;
-- Ergänze WHERE film_id = 1 und starte noch einmal.

Bevor du anfängst

Notiz

Drück oben in der Leiste auf Lab starten, warte auf beide Dienste und öffne das Terminal. Die zwei ersten Runs richten die Anmeldung ein. Alle Abfragen dieser Lektion lesen nur.

Das Zertifikat des Servers annehmen

Befehl
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Hier 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 Datenbank shop

Befehl
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.

Artikel zählen und den Durchschnittspreis bilden

Befehl
sql "SELECT COUNT(*) AS artikel, ROUND(AVG(price), 2) AS durchschnitt FROM products"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

GROUP BY macht aus jeder Gruppe eine Zeile

Oft willst du nicht einen Wert für alles, sondern einen je Film. GROUP BY film_id bildet eine Gruppe je Wert in dieser Spalte.

Jede Aggregatfunktion rechnet dann nur innerhalb ihrer Gruppe. Du bekommst eine Ergebniszeile je Gruppe. Die Spalte, nach der du gruppierst, schreibst du auch hinter SELECT.

Beispiel: dieselben Karten, nach Film gruppiert

film_idCOUNT(*)SUM(preis_euro)
1430
2320
3216

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Artikel je Kategorie zählen

Befehl
sql "SELECT category_id, COUNT(*) AS anzahl FROM products WHERE category_id IS NOT NULL GROUP BY category_id ORDER BY category_id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Bestellungen je Status zählen

Befehl
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.

Probier es: Einnahmen je Film

Code: sql
-- Karten und Einnahmen je Film.
SELECT film_id, COUNT(*) AS karten, SUM(preis_euro) AS summe
FROM tickets
GROUP BY film_id
ORDER BY film_id;
-- Ergänze HAVING COUNT(*) >= 3 hinter GROUP BY.

HAVING filtert Gruppen, WHERE filtert Zeilen

WHERE prüft jede Zeile, bevor gruppiert wird. HAVING prüft jede Gruppe, nachdem sie gerechnet ist.

Willst du nur Filme mit mindestens drei Karten, schreibst du HAVING COUNT(*) >= 3. Die Zahl der Karten gibt es vor dem Gruppieren noch nicht, also kann WHERE sie nicht prüfen.

Ein häufiger Fehler

Warnung

Viele schreiben WHERE COUNT(*) > 5 und bekommen einen Fehler. WHERE läuft vor dem Zählen. Schreib die Bedingung an einer Gruppe in HAVING, und die Bedingung an einer einzelnen Zeile in WHERE.

Lieferanten mit mindestens sechs Artikeln

Befehl
sql "SELECT supplier_id, COUNT(*) AS artikel FROM products GROUP BY supplier_id HAVING COUNT(*) >= 6 ORDER BY supplier_id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Fehler, echt gestartet

Befehl
sql "SELECT supplier_id, COUNT(*) AS artikel FROM products WHERE COUNT(*) >= 6 GROUP BY supplier_id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: MySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.