HAVING-Klausel
Die Schule ist sehr dankbar für Ihre Arbeit, und nun gibt es eine neue Aufgabe für uns.
Es hat sich herausgestellt, dass einige Schüler zusätzliche Prüfungen abgelegt haben, obwohl sie nur eine ablegen sollten. Die Schule verdächtigt sie des Betrugs, da jeder Schüler nur eine Note haben sollte.
Unsere Aufgabe ist es, die Nachnamen dieser Schüler zu ermitteln und sie der Schulleitung zu übergeben, damit diese die erforderlichen Maßnahmen ergreifen kann.
Überlegen wir gemeinsam, wie wir dies erreichen können. Man könnte zunächst in Betracht ziehen, dies mit einer WHERE-Klausel zu lösen, was ungefähr so aussehen würde:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Wie Sie sehen, erhalten wir eine Fehlermeldung, die darauf hinweist, dass Aggregatfunktionen nicht innerhalb einer WHERE-Klausel verwendet werden können. Hier kommt die HAVING-Klausel zum Einsatz.
Angenommen, es sollen die Abteilungen ermittelt werden, in denen das durchschnittliche Gehalt der Mitarbeiter unter 70.000 $ pro Jahr liegt.
Dazu muss eine Aggregatfunktion zusammen mit der HAVING-Klausel verwendet werden:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Wir haben eine Abteilung als Antwort mit der HAVING-Klausel erhalten, bei der wir eine Bedingung für die Spalte festgelegt haben, nach der wir die Daten gruppiert haben.
Hinweis
Um Datenaggregation innerhalb der
HAVING-Klausel zu verwenden, muss eine Gruppierung der Daten in der Abfrage vorhanden sein. Wie in der obigen Abfrage haben wir die Daten nach der Spaltedepartmentgruppiert.
Sehen wir uns die allgemeinere Syntax der HAVING-Klausel an und wann sie am besten eingesetzt wird:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Verstehen wir auch kurz den Hauptunterschied zwischen den Klauseln WHERE und HAVING sowie deren jeweilige Einsatzgebiete:
- Die
WHERE-Klausel wird vor der Datenaggregation verwendet, während dieHAVING-Klausel nach der Datenaggregation eingesetzt wird; - Die
WHERE-Klausel steht vorGROUP BY, während dieHAVING-Klausel nachGROUP BYgeschrieben wird.
Dies sind die zwei wichtigsten Unterschiede, die Sie sich für die erfolgreiche Nutzung der HAVING-Klausel merken sollten. Kehren wir nun zur Aufgabe der Schule zurück.
Swipe to start coding
Ihre Aufgabe besteht darin, die Nachnamen der Schüler abzurufen, die mehrere Noten für die Schule haben.
Sie müssen nur die Nachnamen der Schüler abrufen; es ist nicht erforderlich, die Anzahl ihrer Noten im Ergebnis anzugeben. Verwenden Sie die HAVING-Klausel und die Aggregatfunktion COUNT(), um diese Aufgabe zu erfüllen. Sortieren Sie anschließend die Nachnamen in alphabetischer Reihenfolge.
Hinweis:
Das Ergebnis sollte nur eine Spalte mit Nachnamen enthalten.
Kurzanleitung
- Abruf der Spalte
student_surname. - Gruppieren der Daten nach
student_surname. - Verwenden der
HAVING-Klausel, um die Ergebnisse mitCOUNT(grade) > 1zu filtern. - Sortieren der Ergebnisse nach
student_surname.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Großartig!
Completion Rate verbessert auf 4
HAVING-Klausel
Swipe um das Menü anzuzeigen
Die Schule ist sehr dankbar für Ihre Arbeit, und nun gibt es eine neue Aufgabe für uns.
Es hat sich herausgestellt, dass einige Schüler zusätzliche Prüfungen abgelegt haben, obwohl sie nur eine ablegen sollten. Die Schule verdächtigt sie des Betrugs, da jeder Schüler nur eine Note haben sollte.
Unsere Aufgabe ist es, die Nachnamen dieser Schüler zu ermitteln und sie der Schulleitung zu übergeben, damit diese die erforderlichen Maßnahmen ergreifen kann.
Überlegen wir gemeinsam, wie wir dies erreichen können. Man könnte zunächst in Betracht ziehen, dies mit einer WHERE-Klausel zu lösen, was ungefähr so aussehen würde:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Wie Sie sehen, erhalten wir eine Fehlermeldung, die darauf hinweist, dass Aggregatfunktionen nicht innerhalb einer WHERE-Klausel verwendet werden können. Hier kommt die HAVING-Klausel zum Einsatz.
Angenommen, es sollen die Abteilungen ermittelt werden, in denen das durchschnittliche Gehalt der Mitarbeiter unter 70.000 $ pro Jahr liegt.
Dazu muss eine Aggregatfunktion zusammen mit der HAVING-Klausel verwendet werden:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Wir haben eine Abteilung als Antwort mit der HAVING-Klausel erhalten, bei der wir eine Bedingung für die Spalte festgelegt haben, nach der wir die Daten gruppiert haben.
Hinweis
Um Datenaggregation innerhalb der
HAVING-Klausel zu verwenden, muss eine Gruppierung der Daten in der Abfrage vorhanden sein. Wie in der obigen Abfrage haben wir die Daten nach der Spaltedepartmentgruppiert.
Sehen wir uns die allgemeinere Syntax der HAVING-Klausel an und wann sie am besten eingesetzt wird:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Verstehen wir auch kurz den Hauptunterschied zwischen den Klauseln WHERE und HAVING sowie deren jeweilige Einsatzgebiete:
- Die
WHERE-Klausel wird vor der Datenaggregation verwendet, während dieHAVING-Klausel nach der Datenaggregation eingesetzt wird; - Die
WHERE-Klausel steht vorGROUP BY, während dieHAVING-Klausel nachGROUP BYgeschrieben wird.
Dies sind die zwei wichtigsten Unterschiede, die Sie sich für die erfolgreiche Nutzung der HAVING-Klausel merken sollten. Kehren wir nun zur Aufgabe der Schule zurück.
Swipe to start coding
Ihre Aufgabe besteht darin, die Nachnamen der Schüler abzurufen, die mehrere Noten für die Schule haben.
Sie müssen nur die Nachnamen der Schüler abrufen; es ist nicht erforderlich, die Anzahl ihrer Noten im Ergebnis anzugeben. Verwenden Sie die HAVING-Klausel und die Aggregatfunktion COUNT(), um diese Aufgabe zu erfüllen. Sortieren Sie anschließend die Nachnamen in alphabetischer Reihenfolge.
Hinweis:
Das Ergebnis sollte nur eine Spalte mit Nachnamen enthalten.
Kurzanleitung
- Abruf der Spalte
student_surname. - Gruppieren der Daten nach
student_surname. - Verwenden der
HAVING-Klausel, um die Ergebnisse mitCOUNT(grade) > 1zu filtern. - Sortieren der Ergebnisse nach
student_surname.
Lösung
Danke für Ihr Feedback!
single