SQL: HAVING vs. WHERE – Filterung aggregierter Daten
Dieser Artikel zeigt den Hauptunterschied zwischen WHERE
- und HAVING
-Klauseln in SQL, insbesondere bei der Arbeit mit aggregierten Daten. Wir verwenden das Beispiel der Suche nach dem Dozenten mit den meisten Spezialisierungen. Eine WHERE
-Klausel allein reicht für diese Aufgabe nicht aus; eine HAVING
-Klausel ist erforderlich.
Den Unterschied verstehen
Die WHERE
-Klausel filtert einzelne Zeilen, bevor eine Gruppierung erfolgt. Es wendet Bedingungen auf einzelne Datensätze innerhalb einer Tabelle an. Umgekehrt filtert die HAVING
-Klausel nach der Gruppierung und arbeitet mit Aggregatfunktionen wie COUNT
, SUM
, AVG
und MIN
. Dies ist entscheidend, wenn auf der Grundlage der Aggregationsergebnisse gefiltert wird, wie in unserem Beispiel für die Dozentenspezialisierung.
Best Practice
Aus Gründen der Klarheit und Effizienz gilt als allgemeine Regel, WHERE
vor GROUP BY
und HAVING
nach GROUP BY
zu verwenden. Dieser Ansatz vereinfacht die Abfrageerstellung und verbessert die Lesbarkeit.
Optimierte Abfrage
Die folgende Abfrage verwendet einen ANSI-Join und eine HAVING
-Klausel, um die Dozenten mit der maximalen Anzahl an Spezialisierungen effizient zu identifizieren:
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L JOIN Lecturers_Specialization S ON L.LectID = S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>
Diese überarbeitete Abfrage macht eine WHERE
-Klausel als Theta-Join-Bedingung überflüssig, was zu einer schlankeren und effizienteren Abfrage führt.
Das obige ist der detaillierte Inhalt vonWO vs. HAVING: Wann sollten Sie die einzelnen Klauseln verwenden, um aggregierte Daten zu finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!