5.1 HAVING-Anweisung
Es gibt einen weiteren nützlichen Operator in SQL, der mit verwendet wird GROUP BY
, er heißt HAVING
.
In seiner Bedeutung ist es völlig analog zum Operator WHERE
. Sie können damit lediglich WHERE
einen Zeilenfilter vor dem Gruppieren festlegen und mit der Hilfe HAVING
einen Filter festlegen, der nach dem Gruppieren auf Datensätze angewendet wird.
Die allgemeine Ansicht der Abfrage beim Verwenden der Gruppierung und Filterung von Gruppierungsergebnissen ist wie folgt:
SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition
HAVING
kann nur verwendet werden, wenn die Anfrage enthält GROUP BY
.
Schreiben wir eine Abfrage, in der wir die Anzahl der eingestellten Mitarbeiter pro Jahr anzeigen.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Und das Ergebnis dieser Abfrage:
Hire_Year | gesamt |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Und jetzt schließen wir die Jahre aus, in denen ein oder weniger Mitarbeiter eingestellt wurden. Beispiel:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
Und das Ergebnis dieser Abfrage:
Hire_Year | gesamt |
---|---|
2015 | 2 |
5.3 Reihenfolge der Ausführung von Anweisungen
Um korrekte und effiziente SQL-Abfragen zu schreiben, müssen Sie verstehen, wie diese vom SQL-Server ausgeführt werden.
Das Verfahren zur Durchführung von Aktionen ist streng geregelt und hängt nicht von Ihrem Wunsch ab. Sie können die Operatoren nicht neu anordnen und eine andere Reihenfolge erhalten.
Die SQL-Abfrage wird in dieser Reihenfolge in mehreren Schritten ausgeführt.
- Stufe 1 – Zeilen abrufen
- Zunächst werden alle Zeilen aus der angegebenen Tabelle ausgewählt.
- Dann werden ihnen berechnete Felder hinzugefügt.
- Und dann bleiben von allen Zeilen nur diejenigen übrig, die die Bedingung erfüllen
WHERE
- Stufe 2 – Gruppierung
- Anschließend wird die Gruppierung auf die Ergebnisse angewendet.
- Beim Gruppieren werden Felder wie
COUNT(*)
. - Abschließend wird ein Filter auf das Gruppierungsergebnis angewendet
HAVING
. - Stufe 3 – Sortieren
- Die in den vorherigen Schritten erhaltenen Zeilen werden mit sortiert
ORDER BY
.
Abschließend kann das Ergebnis mit LIMIT
und getrimmt werden OFFSET
.
GO TO FULL VERSION