Informatik

Rückblick

Dieses Kapitel hat die Blickrichtung geändert: Bisher ging es um einzelne Zeilen, jetzt um Gruppen von Zeilen. Damit lassen sich Fragen beantworten, die vorher unerreichbar waren – und es entstehen Fehler, die vorher unmöglich waren.

Das kann ich jetzt

  • Ich kann COUNT, SUM, AVG, MIN und MAX einsetzen und den Unterschied zwischen COUNT(*) und COUNT(spalte) erklären. (4.1)
  • Ich kann mit GROUP BY gruppieren und halte dabei die goldene Regel ein. (4.2)
  • Ich kann WHERE und HAVING auseinanderhalten und begründen, warum es beides gibt. (4.3)
  • Ich kann Unterabfragen an den Stellen WHERE, SELECT und FROM einsetzen. (4.4)
  • Ich kann die Auswertungsreihenfolge einer Abfrage aufsagen und damit erklären, warum bestimmte Formulierungen scheitern. (4.5)

Gemischte Aufgaben

Aufgabe 1: Vier Auswertungen

a) Wie viele Auftritte fanden auf jeder Bühne statt, und wie viele Zuschauer kamen dort im Durchschnitt? Ausgabe: Bühnenname, Anzahl, gerundeter Durchschnitt – die Bühne mit den meisten Auftritten zuerst.

b) Welche Bands sind mehr als zweimal aufgetreten? Ausgabe: Bandname und Anzahl.

c) Wie viele Bands hat jedes Genre? Ausgabe: Genrename und Anzahl, absteigend.

d) Welche Auftritte haben mehr Zuschauer als der Durchschnitt aller Auftritte? Gib nur die Anzahl solcher Auftritte aus.

Tipp 1: Woran erkenne ich, dass ich gruppieren muss?

An Formulierungen wie „je", „pro", „für jede". Steht in der Frage „auf jeder Bühne", dann ist buehne das Gruppierungsmerkmal.

Die Frage „Wie viele Auftritte gab es insgesamt?" braucht dagegen kein GROUP BY – dort ist die ganze Tabelle eine einzige Gruppe.

Tipp 2: zu b)

Die Bedingung „mehr als zweimal" betrifft nicht einzelne Zeilen, sondern Gruppen. Sie gehört deshalb nicht ins WHERE, sondern ins HAVING – und zwar nach dem GROUP BY.

Tipp 3: zu d)

Du brauchst zwei Werte: die Zuschauerzahl jedes Auftritts und den Durchschnitt über alle. Der Durchschnitt ist eine einzige Zahl – die berechnet eine Unterabfrage im WHERE:

WHERE zuschauer > (SELECT AVG(zuschauer) FROM auftritt)
Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 2: Vier Abfragen, die nicht tun, was sie sollen

-- a) Gesucht: Bands mit mehr als zwei Auftritten
SELECT b.name FROM band b JOIN auftritt a ON a.band_id = b.band_id
 WHERE COUNT(*) > 2 GROUP BY b.band_id;
 
-- b) Gesucht: je Bühne die Zahl der Auftritte
SELECT bu.name, a.datum, COUNT(*) FROM buehne bu
  JOIN auftritt a ON a.buehne_id = bu.buehne_id GROUP BY bu.buehne_id;
 
-- c) Gesucht: die Zahl der Bewertungen je Auftritt am 18. Juli
SELECT auftritt_id, COUNT(*) FROM bewertung GROUP BY auftritt_id
HAVING auftritt_id IN (SELECT auftritt_id FROM auftritt WHERE datum = '2026-07-18');
 
-- d) Gesucht: der Auftritt mit den meisten Zuschauern
SELECT MAX(zuschauer), datum, beginn FROM auftritt;

Sag für jede: Bricht sie ab oder läuft sie durch? Was ist der Fehler, und wie lautet die richtige Fassung?

Tipp

Denk an die Auswertungsreihenfolge: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Alles, was zum Zeitpunkt einer Klausel noch nicht existiert, kann dort auch nicht benutzt werden.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 3: Eine Abfrage vorlesen

SELECT b.name, COUNT(*) AS auftritte, ROUND(AVG(a.zuschauer), 0) AS schnitt
  FROM band b
  JOIN auftritt a ON a.band_id = b.band_id
 WHERE a.dauer_min >= 60
 GROUP BY b.band_id, b.name
HAVING COUNT(*) >= 2
 ORDER BY schnitt DESC
 LIMIT 3;

a) Beschreibe in einem deutschen Satz, was diese Abfrage liefert.

b) Nenne die Auswertungsschritte in der Reihenfolge, in der das Datenbanksystem sie abarbeitet, und sag jeweils, was danach vorliegt.

c) An welcher Stelle wirkt dauer_min >= 60, an welcher COUNT(*) >= 2? Warum lassen sich die beiden Bedingungen nicht tauschen?

d) Warum darf im ORDER BY der Name schnitt stehen, obwohl es diese Spalte in der Tabelle nicht gibt?

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Selbsttest

Rückblick

Teilbare URL erstellen

Abschnitte auswählen