Having
Mit dem Befehl HAVING in SQL kann man Gruppen von Datensätzen anhand einer Bedingung filtern. Der Befehl wird häufig in Verbindung mit GROUP BY und Aggregatfunktionen wie COUNT(), SUM(), AVG(), MIN() und MAX() verwendet.
Während WHERE einzelne Datensätze vor der Gruppierung filtert, filtert HAVING die Gruppen nach der Gruppierung. Dadurch kann man beispielsweise nur die Abteilungen anzeigen lassen, in denen mehr als fünf Mitarbeiter beschäftigt sind.
Hier ein paar Details zum Befehl HAVING in SQL:
Filtern von Gruppen mit HAVING
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 5;
Dies gruppiert die Datensätze nach column_name und gibt nur die Gruppen aus, die mehr als fünf Datensätze enthalten.
SELECT Abteilung, count(*) as "Anzahl Mitarbeiter"
from personal
group by abteilung
having "Anzahl Mitarbeiter" > 2;
Dies zählt die Mitarbeiter jeder Abteilung. Angezeigt werden nur die Abteilungen, in denen mehr als zwei Mitarbeiter beschäftigt sind.
Filtern nach berechneten Werten
Mit HAVING kann man Gruppen auch anhand von Summen oder Durchschnittswerten filtern.
SELECT Abteilung, AVG(gehalt)
FROM personal
GROUP BY Abteilung
HAVING AVG(gehalt) > 3500;
Dies berechnet den durchschnittlichen Jahresbonus für jede Abteilung. Angezeigt werden nur die Abteilungen, deren durchschnittlicher Jahresbonus über 3500 liegt.
Unterschied zwischen WHERE und HAVING
Die beiden Befehle dienen dazu, Ergebnisse zu filtern. Sie unterscheiden sich jedoch darin, wann und was gefiltert wird.
WHERE filtert einzelne Datensätze vor der Gruppierung.
HAVING filtert Gruppen nach der Gruppierung und kann Bedingungen auf Aggregatfunktionen anwenden.
SELECT Abteilung, COUNT(*) as "Anzahl Mitarbeiter"
FROM personal
WHERE Eintrittsdatum >= '2015-01-01'
GROUP BY Abteilung
HAVING "Anzahl Mitarbeiter" > 1;
Diese Abfrage berücksichtigt zunächst nur Mitarbeiter, die am oder nach dem 1. Januar 2015 eingestellt wurden. Anschließend werden die verbleibenden Mitarbeiter nach Abteilungen gruppiert. Ausgegeben werden nur die Abteilungen, in denen mehr als ein Mitarbeiter die Bedingung erfüllt.