Direkt zum Inhalt

BPE 6 · J1

Gruppen bilden und mit HAVING filtern

Du berechnest Kennzahlen getrennt nach Region oder Status und unterscheidest, ob eine Bedingung einzelne Zeilen oder fertige Gruppen betrifft.

Bildungsplanbezug: BPE 6.4 · interne Lerneinheit 6.2.5

Geschätzte Lernzeit: 55 Minuten

Noch nicht begonnen

Das kannst du danach

  • Zeilen mit GROUP BY fachlich gruppieren
  • mehrere Gruppenmerkmale einsetzen
  • Gruppenergebnisse mit HAVING filtern
  • WHERE und HAVING in derselben Abfrage kombinieren

Verständlich erklärt

GROUP BY bildet aus den ausgewählten Zeilen Gruppen mit gleichen Merkmalswerten. Aggregate werden dann je Gruppe berechnet. Jede ausgegebene, nicht aggregierte Spalte wird hier ausdrücklich gruppiert. WHERE filtert vorher einzelne Datensätze, HAVING danach die Gruppenergebnisse. Die gedankliche Reihenfolge lautet FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. SQLite lässt manche ungruppierten Spalten zu; deren willkürlich ausgewählte Werte sind aber keine saubere, übertragbare Lösung.

  • GROUP BY
  • Gruppierungsmerkmal
  • HAVING
  • Aggregat
  • WHERE

Beispiel

SELECT region, SUM(betrag) AS umsatz
FROM bestellung
WHERE status = 'bezahlt'
GROUP BY region
HAVING SUM(betrag) >= 100
ORDER BY region;

Typische Fehler

  • Aggregatbedingungen in WHERE schreiben
  • Unterschiedliche Status in eine unerwünschte Gesamtsumme aufnehmen
  • Nicht aggregierte Ausgabespalten bei GROUP BY vergessen

Kurz zusammengefasst

WHERE entscheidet, welche Zeilen mitrechnen; GROUP BY bestimmt die Gruppen; HAVING entscheidet, welche berechneten Gruppen im Ergebnis bleiben.

Abi-Bezug

Übersetze mehrteilige Berichtsanfragen in Zeilenfilter, Gruppierungsmerkmale und Gruppenfilter. Begründe die Position jeder Bedingung.

Jetzt selbst ausprobieren

Prüfe deine Lösung automatisch. Bei Bedarf helfen dir ein Tipp und anschließend die Musterlösung.

BPE 6J11 Punkteleicht

Bestellungen je Region zählen

Noch nicht begonnen

Aufgabenstellung

Gib für jede vorhandene Region ihre Bezeichnung und die Zahl der Bestellungen als anzahl aus.

Ergebnisspalten in dieser Reihenfolge: region, anzahl. Die Zeilenreihenfolge ist hier beliebig. Gib genau diese eine Ergebnistabelle aus.

Datenbankschema und vollständige Startdaten anzeigen

Fiktive Übungsdaten. Jeder Test startet neu mit genau diesen Daten. NULL bedeutet: kein Wert gespeichert. Preise und Beträge sind ganze Euro; das Datum hat das Format JJJJ-MM-TT.

CREATE TABLE bestellung (id INTEGER PRIMARY KEY, region TEXT NOT NULL, status TEXT NOT NULL, betrag INTEGER NOT NULL, datum TEXT NOT NULL);
Startdaten: bestellung
idregionstatusbetragdatum
1Nordbezahlt402026-03-01
2Nordoffen202026-03-10
3Suedbezahlt302026-03-12
4Suedbezahlt702026-04-01
5Weststorniert502026-03-20
6Westbezahlt102025-03-15
7Nordbezahlt602026-04-15
8Ostoffen202026-03-31

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. GROUP BY region erzeugt eine Gruppe je Region.
  2. COUNT(*) wird anschließend für jede Gruppe getrennt ausgewertet.
Lösung anzeigen
SELECT region, COUNT(*) AS anzahl FROM bestellung GROUP BY region;
BPE 6J11 Punkteleicht

Bestellwert pro Region

Noch nicht begonnen

Aufgabenstellung

Berechne die Summe aller Bestellbeträge je Region als bestellwert. Alle Status zählen mit. Sortiere die Ausgabe aufsteigend nach Region.

Ergebnisspalten in dieser Reihenfolge: region, bestellwert. Die angegebene Zeilensortierung wird geprüft. Gib genau diese eine Ergebnistabelle aus.

Datenbankschema und vollständige Startdaten anzeigen

Fiktive Übungsdaten. Jeder Test startet neu mit genau diesen Daten. NULL bedeutet: kein Wert gespeichert. Preise und Beträge sind ganze Euro; das Datum hat das Format JJJJ-MM-TT.

CREATE TABLE bestellung (id INTEGER PRIMARY KEY, region TEXT NOT NULL, status TEXT NOT NULL, betrag INTEGER NOT NULL, datum TEXT NOT NULL);
Startdaten: bestellung
idregionstatusbetragdatum
1Nordbezahlt402026-03-01
2Nordoffen202026-03-10
3Suedbezahlt302026-03-12
4Suedbezahlt702026-04-01
5Weststorniert502026-03-20
6Westbezahlt102025-03-15
7Nordbezahlt602026-04-15
8Ostoffen202026-03-31

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Die Einzelbeträge werden je Region mit SUM zusammengefasst.
  2. Es ist kein Statusfilter verlangt; auch offen und storniert zählen mit.
Lösung anzeigen
SELECT region, SUM(betrag) AS bestellwert FROM bestellung GROUP BY region ORDER BY region ASC;
BPE 6J12 Punktemittel

Nur bezahlte Bestellungen auswerten

Noch nicht begonnen

Aufgabenstellung

Berechne je Region den Umsatz aus ausschließlich bezahlten Bestellungen als umsatz. Regionen ohne bezahlte Bestellung müssen hier nicht erscheinen.

Ergebnisspalten in dieser Reihenfolge: region, umsatz. Die Zeilenreihenfolge ist hier beliebig. Gib genau diese eine Ergebnistabelle aus.

Datenbankschema und vollständige Startdaten anzeigen

Fiktive Übungsdaten. Jeder Test startet neu mit genau diesen Daten. NULL bedeutet: kein Wert gespeichert. Preise und Beträge sind ganze Euro; das Datum hat das Format JJJJ-MM-TT.

CREATE TABLE bestellung (id INTEGER PRIMARY KEY, region TEXT NOT NULL, status TEXT NOT NULL, betrag INTEGER NOT NULL, datum TEXT NOT NULL);
Startdaten: bestellung
idregionstatusbetragdatum
1Nordbezahlt402026-03-01
2Nordoffen202026-03-10
3Suedbezahlt302026-03-12
4Suedbezahlt702026-04-01
5Weststorniert502026-03-20
6Westbezahlt102025-03-15
7Nordbezahlt602026-04-15
8Ostoffen202026-03-31

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Einzelne unbezahlte Zeilen müssen vor der Summierung entfernt werden.
  2. WHERE status = 'bezahlt' steht vor GROUP BY.
Lösung anzeigen
SELECT region, SUM(betrag) AS umsatz FROM bestellung WHERE status = 'bezahlt' GROUP BY region;
BPE 6J12 Punktemittel

Regionen mit mindestens zwei Bestellungen

Noch nicht begonnen

Aufgabenstellung

Gib nur Regionen mit mindestens zwei Bestellungen aus. Zeige Region und Anzahl als anzahl; alle Status zählen.

Ergebnisspalten in dieser Reihenfolge: region, anzahl. Die Zeilenreihenfolge ist hier beliebig. Gib genau diese eine Ergebnistabelle aus.

Datenbankschema und vollständige Startdaten anzeigen

Fiktive Übungsdaten. Jeder Test startet neu mit genau diesen Daten. NULL bedeutet: kein Wert gespeichert. Preise und Beträge sind ganze Euro; das Datum hat das Format JJJJ-MM-TT.

CREATE TABLE bestellung (id INTEGER PRIMARY KEY, region TEXT NOT NULL, status TEXT NOT NULL, betrag INTEGER NOT NULL, datum TEXT NOT NULL);
Startdaten: bestellung
idregionstatusbetragdatum
1Nordbezahlt402026-03-01
2Nordoffen202026-03-10
3Suedbezahlt302026-03-12
4Suedbezahlt702026-04-01
5Weststorniert502026-03-20
6Westbezahlt102025-03-15
7Nordbezahlt602026-04-15
8Ostoffen202026-03-31

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Die Anzahl ist erst nach der Gruppierung bekannt.
  2. Eine Bedingung über COUNT(*) gehört in HAVING; mindestens zwei schließt zwei ein.
Lösung anzeigen
SELECT region, COUNT(*) AS anzahl FROM bestellung GROUP BY region HAVING COUNT(*) >= 2;
BPE 6J13 Punkteanspruchsvoll

Region und Status gemeinsam gruppieren

Noch nicht begonnen

Aufgabenstellung

Berechne für jede vorkommende Kombination aus Region und Status die Zahl der Bestellungen als anzahl. Zeige beide Gruppierungsmerkmale. Leere Kombinationen werden nicht ergänzt.

Ergebnisspalten in dieser Reihenfolge: region, status, anzahl. Die Zeilenreihenfolge ist hier beliebig. Gib genau diese eine Ergebnistabelle aus.

Datenbankschema und vollständige Startdaten anzeigen

Fiktive Übungsdaten. Jeder Test startet neu mit genau diesen Daten. NULL bedeutet: kein Wert gespeichert. Preise und Beträge sind ganze Euro; das Datum hat das Format JJJJ-MM-TT.

CREATE TABLE bestellung (id INTEGER PRIMARY KEY, region TEXT NOT NULL, status TEXT NOT NULL, betrag INTEGER NOT NULL, datum TEXT NOT NULL);
Startdaten: bestellung
idregionstatusbetragdatum
1Nordbezahlt402026-03-01
2Nordoffen202026-03-10
3Suedbezahlt302026-03-12
4Suedbezahlt702026-04-01
5Weststorniert502026-03-20
6Westbezahlt102025-03-15
7Nordbezahlt602026-04-15
8Ostoffen202026-03-31

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Ein Gruppenmerkmal reicht nicht, weil etwa Nord zwei Status besitzt.
  2. Führe region und status gemeinsam in GROUP BY auf.
Lösung anzeigen
SELECT region, status, COUNT(*) AS anzahl FROM bestellung GROUP BY region, status;
BPE 6J13 Punkteanspruchsvoll

Umsatzgrenze nach Vorauswahl

Noch nicht begonnen

Aufgabenstellung

Berücksichtige nur bezahlte Bestellungen. Gib Region und Umsatz als umsatz nur für Regionen aus, deren bezahlter Umsatz mindestens 100 Euro erreicht. Sortiere nach Region aufsteigend.

Ergebnisspalten in dieser Reihenfolge: region, umsatz. Die angegebene Zeilensortierung wird geprüft. Gib genau diese eine Ergebnistabelle aus.

Datenbankschema und vollständige Startdaten anzeigen

Fiktive Übungsdaten. Jeder Test startet neu mit genau diesen Daten. NULL bedeutet: kein Wert gespeichert. Preise und Beträge sind ganze Euro; das Datum hat das Format JJJJ-MM-TT.

CREATE TABLE bestellung (id INTEGER PRIMARY KEY, region TEXT NOT NULL, status TEXT NOT NULL, betrag INTEGER NOT NULL, datum TEXT NOT NULL);
Startdaten: bestellung
idregionstatusbetragdatum
1Nordbezahlt402026-03-01
2Nordoffen202026-03-10
3Suedbezahlt302026-03-12
4Suedbezahlt702026-04-01
5Weststorniert502026-03-20
6Westbezahlt102025-03-15
7Nordbezahlt602026-04-15
8Ostoffen202026-03-31

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Der Statusfilter gehört in WHERE, die Umsatzgrenze in HAVING.
  2. Die Summe 100 erfüllt die Formulierung mindestens 100 genau.
Lösung anzeigen
SELECT region, SUM(betrag) AS umsatz FROM bestellung WHERE status = 'bezahlt' GROUP BY region HAVING SUM(betrag) >= 100 ORDER BY region ASC;

Lektionsabschluss

Bearbeite Aufgaben, um deine Auswertung zu sehen.