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 WHEREeinen Zeilenfilter vor dem Gruppieren festlegen und mit der Hilfe HAVINGeinen 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

HAVINGkann 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.

  1. 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üllenWHERE
  2. 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.
  3. Stufe 3 – Sortieren
    • Die in den vorherigen Schritten erhaltenen Zeilen werden mit sortiert ORDER BY.

Abschließend kann das Ergebnis mit LIMITund getrimmt werden OFFSET.