Lösung Übung E: Lehrergehalt (HAVING)
Abschlussbedingungen
Lösung Übung E: Lehrergehalt (HAVING)
E) Wie viele Lehrer, die mehr als 3000 Euro verdienen, sind Angestellter / Beamter? Bitte nur diejenigen berücksichtigen, die im Ort Nr. 1 bis 3 wohnen (in SQL: BETWEEN 1 AND 3).
Welche Lösung ist die richtige?
(E1)
SELECT COUNT(l.id) AS anzahl, l.status FROM lehrer l WHERE l.gehalt > 3000 AND l.idOrte BETWEEN 1 AND 3 GROUP BY l.status(E2)
SELECT COUNT(l.id) AS anzahl, l.status FROM lehrer l WHERE l.idOrte BETWEEN 1 AND 3 GROUP BY l.status HAVING l.gehalt > 3000LÖSUNG:
(E1)
- Gehalt > 3000 → Das ist ein Zeilenfilter, weil wir jede einzelne Lehrkraft prüfen und hier richtig. Wir wollen nur anhand des individuellen Gehaltes der einzelnen Personen filtern.
- HAVING l.gehalt > 3000 wird nach der Gruppierung ausgewertet.
HAVINGarbeitet auf Gruppen. Eine Gruppe enthält mehrere Lehrer mit unterschiedlichen Gehältern. Welchen Lehrer sollte er auswählen? Wenn hinter HAVING eine Aggregatsfunktion stände, käme ja ein Wert raus und das wäre eindeutig.
Hier ist also die Frage: Welches Gehalt soll geprüft werden? Das Ergebnis ist nicht eindeutig, da in der Gruppe einige Lehrer mit unterschiedlichen Gehälter sind.
Tipp: Lege die Frage mal einem ChatBot hin - gibt er dir eine verständlichere Erklärung. Evtl. auch beide SQL Befehle in den Chat kopieren (Kontext geben) und dann Schritt für Schritt erklären lassen...