Kursinhalt
Fortgeschrittene SQL
Fortgeschrittene SQL
Having-Klausel
Die Schule ist sehr dankbar für Ihre Arbeit, und jetzt haben wir eine neue Aufgabe. Es hat sich gezeigt, dass einige Schüler zusätzliche Prüfungen abgelegt haben, obwohl sie eigentlich nur eine ablegen sollten. Die Schule verdächtigt sie des Betrugs, da jedem Schüler nur eine Note zugeteilt werden sollte. Wir wurden beauftragt, die Nachnamen dieser Schüler zu ermitteln und sie an die Schulverwaltung weiterzuleiten, damit diese die notwendigen Maßnahmen ergreifen kann.
Lassen Sie uns gemeinsam darüber nachdenken, wie wir das umsetzen können. Sie könnten damit beginnen, in Betracht zu ziehen, dass wir dies mithilfe einer WHERE
-Klausel durchführen können, und es würde ungefähr so aussehen:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Aber, wie Sie sehen können, erhalten wir einen Fehler, der darauf hinweist, dass wir keine Aggregatfunktionen innerhalb einer WHERE
-Klausel verwenden können. Hierfür benötigen wir die HAVING
-Klausel.
Angenommen, wir müssen die Abteilungen abrufen, in denen das durchschnittliche Gehalt der Angestellten unter 70.000 $ pro Jahr liegt.
Um dies zu erreichen, müssen wir eine Aggregatfunktion und die HAVING
-Klausel verwenden:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Wir haben eine Abteilung als Antwort unter Verwendung der HAVING
-Klausel erhalten, wobei wir eine Bedingung für die Spalte gesetzt haben, nach der wir die Daten gruppiert haben.
Hinweis
Um Datenaggregation innerhalb der
HAVING
-Klausel zu verwenden, müssen wir eine Datenaggregation in unserer Abfrage haben. Wie in der obigen Abfrage haben wir die Daten nach derdepartment
-Spalte gruppiert.
Schauen wir uns die allgemeinere Syntax der HAVING
-Klausel an und wann sie am besten eingesetzt wird:
Lassen Sie uns auch kurz den Hauptunterschied zwischen den WHERE
- und HAVING
-Klauseln verstehen und wann man welche verwendet:
- Die
WHERE
-Klausel wird vor der Datenaggregation verwendet, während dieHAVING
-Klausel nach der Datenaggregation eingesetzt wird; - Die
WHERE
-Klausel wird vorGROUP BY
geschrieben, während dieHAVING
-Klausel nachGROUP BY
platziert wird.
Dies sind die zwei Hauptunterschiede, die Sie für den erfolgreichen Einsatz der HAVING
-Klausel beachten müssen. Kehren wir nun zur von der Schule gestellten Aufgabe zurück.
Swipe to start coding
Deine Aufgabe besteht darin, die Nachnamen der Studenten abzurufen, die für die Schule mehrere Noten haben.
Du musst nur die Nachnamen der Studenten abrufen; es ist nicht erforderlich, die Anzahl ihrer Noten in das Ergebnis aufzunehmen. Verwende die HAVING
-Klausel und die Aggregatfunktion COUNT()
um diese Aufgabe zu erfüllen. Sortiere anschließend die Nachnamen in alphabetischer Reihenfolge.
Hinweis:
Im Ergebnis sollte nur eine Spalte mit Nachnamen vorhanden sein.
Kurze Anweisungen
- Rufe die Spalte
student_surname
ab. - Gruppiere die Daten nach
student_surname
. - Verwende die
HAVING
-Klausel, um die Ergebnisse basierend aufCOUNT(grade) > 1
zu filtern. - Sortiere das Ergebnis nach
student_surname
.
Lösung
Danke für Ihr Feedback!
Having-Klausel
Die Schule ist sehr dankbar für Ihre Arbeit, und jetzt haben wir eine neue Aufgabe. Es hat sich gezeigt, dass einige Schüler zusätzliche Prüfungen abgelegt haben, obwohl sie eigentlich nur eine ablegen sollten. Die Schule verdächtigt sie des Betrugs, da jedem Schüler nur eine Note zugeteilt werden sollte. Wir wurden beauftragt, die Nachnamen dieser Schüler zu ermitteln und sie an die Schulverwaltung weiterzuleiten, damit diese die notwendigen Maßnahmen ergreifen kann.
Lassen Sie uns gemeinsam darüber nachdenken, wie wir das umsetzen können. Sie könnten damit beginnen, in Betracht zu ziehen, dass wir dies mithilfe einer WHERE
-Klausel durchführen können, und es würde ungefähr so aussehen:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Aber, wie Sie sehen können, erhalten wir einen Fehler, der darauf hinweist, dass wir keine Aggregatfunktionen innerhalb einer WHERE
-Klausel verwenden können. Hierfür benötigen wir die HAVING
-Klausel.
Angenommen, wir müssen die Abteilungen abrufen, in denen das durchschnittliche Gehalt der Angestellten unter 70.000 $ pro Jahr liegt.
Um dies zu erreichen, müssen wir eine Aggregatfunktion und die HAVING
-Klausel verwenden:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Wir haben eine Abteilung als Antwort unter Verwendung der HAVING
-Klausel erhalten, wobei wir eine Bedingung für die Spalte gesetzt haben, nach der wir die Daten gruppiert haben.
Hinweis
Um Datenaggregation innerhalb der
HAVING
-Klausel zu verwenden, müssen wir eine Datenaggregation in unserer Abfrage haben. Wie in der obigen Abfrage haben wir die Daten nach derdepartment
-Spalte gruppiert.
Schauen wir uns die allgemeinere Syntax der HAVING
-Klausel an und wann sie am besten eingesetzt wird:
Lassen Sie uns auch kurz den Hauptunterschied zwischen den WHERE
- und HAVING
-Klauseln verstehen und wann man welche verwendet:
- Die
WHERE
-Klausel wird vor der Datenaggregation verwendet, während dieHAVING
-Klausel nach der Datenaggregation eingesetzt wird; - Die
WHERE
-Klausel wird vorGROUP BY
geschrieben, während dieHAVING
-Klausel nachGROUP BY
platziert wird.
Dies sind die zwei Hauptunterschiede, die Sie für den erfolgreichen Einsatz der HAVING
-Klausel beachten müssen. Kehren wir nun zur von der Schule gestellten Aufgabe zurück.
Swipe to start coding
Deine Aufgabe besteht darin, die Nachnamen der Studenten abzurufen, die für die Schule mehrere Noten haben.
Du musst nur die Nachnamen der Studenten abrufen; es ist nicht erforderlich, die Anzahl ihrer Noten in das Ergebnis aufzunehmen. Verwende die HAVING
-Klausel und die Aggregatfunktion COUNT()
um diese Aufgabe zu erfüllen. Sortiere anschließend die Nachnamen in alphabetischer Reihenfolge.
Hinweis:
Im Ergebnis sollte nur eine Spalte mit Nachnamen vorhanden sein.
Kurze Anweisungen
- Rufe die Spalte
student_surname
ab. - Gruppiere die Daten nach
student_surname
. - Verwende die
HAVING
-Klausel, um die Ergebnisse basierend aufCOUNT(grade) > 1
zu filtern. - Sortiere das Ergebnis nach
student_surname
.
Lösung
Danke für Ihr Feedback!