HAVING-Klausel
Die Schule ist Ihnen für Ihre Arbeit sehr dankbar, 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 notwendigen Maßnahmen ergreifen kann.
Überlegen wir gemeinsam, wie wir dies erreichen können. Sie könnten zunächst in Betracht ziehen, dass wir dies mit einer WHERE-Klausel tun können, und es würde ungefähr so aussehen:
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, wir müssen die Abteilungen abrufen, in denen das durchschnittliche Gehalt der Mitarbeiter unter 70.000 $ pro Jahr liegt.
Um dies zu erreichen, müssen wir eine Aggregatfunktion und die HAVING-Klausel verwenden:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Wir haben eine Abteilung als Antwort mit der HAVING-Klausel erhalten, bei der eine Bedingung für die Spalte festgelegt wurde, nach der die Daten gruppiert wurden.
Für die Verwendung von Datenaggregation innerhalb der HAVING-Klausel ist eine Gruppierung der Daten in der Abfrage erforderlich. Wie in der obigen Abfrage wurden die Daten nach der Spalte department gruppiert.
Im Folgenden wird die allgemeinere Syntax der HAVING-Klausel sowie deren optimaler Einsatz erläutert:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Lassen Sie uns auch kurz den Hauptunterschied zwischen den Klauseln WHERE und HAVING sowie deren jeweilige Anwendungsbereiche verstehen:
- 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 Anwendung der HAVING-Klausel merken sollten. Kehren wir nun zur von der Schule gestellten Aufgabe zurück.
Swipe to start coding
Es müssen nur die Nachnamen der Studierenden abgerufen werden; es ist nicht erforderlich, die Anzahl ihrer Noten im Ergebnis einzuschließen. Verwenden Sie die HAVING-Klausel und die Aggregatfunktion COUNT(), um diese Aufgabe zu erfüllen. Sortieren Sie anschließend die Nachnamen in alphabetischer Reihenfolge.
Das Ergebnis soll nur eine Spalte mit Nachnamen enthalten.
Kurzanleitung
- Die Spalte
student_surnameabrufen. - Die Daten nach
student_surnamegruppieren. - Die
HAVING-Klausel verwenden, um die Ergebnisse mitCOUNT(grade) > 1zu filtern. - Die Ergebnisse nach
student_surnamesortieren.
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
Can you show me how to write the correct SQL query to find the students with multiple grades?
Can you explain why the HAVING clause works in this scenario?
Can you give another example of using HAVING for a different case?
Großartig!
Completion Rate verbessert auf 4
HAVING-Klausel
Swipe um das Menü anzuzeigen
Die Schule ist Ihnen für Ihre Arbeit sehr dankbar, 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 notwendigen Maßnahmen ergreifen kann.
Überlegen wir gemeinsam, wie wir dies erreichen können. Sie könnten zunächst in Betracht ziehen, dass wir dies mit einer WHERE-Klausel tun können, und es würde ungefähr so aussehen:
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, wir müssen die Abteilungen abrufen, in denen das durchschnittliche Gehalt der Mitarbeiter unter 70.000 $ pro Jahr liegt.
Um dies zu erreichen, müssen wir eine Aggregatfunktion und die HAVING-Klausel verwenden:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Wir haben eine Abteilung als Antwort mit der HAVING-Klausel erhalten, bei der eine Bedingung für die Spalte festgelegt wurde, nach der die Daten gruppiert wurden.
Für die Verwendung von Datenaggregation innerhalb der HAVING-Klausel ist eine Gruppierung der Daten in der Abfrage erforderlich. Wie in der obigen Abfrage wurden die Daten nach der Spalte department gruppiert.
Im Folgenden wird die allgemeinere Syntax der HAVING-Klausel sowie deren optimaler Einsatz erläutert:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Lassen Sie uns auch kurz den Hauptunterschied zwischen den Klauseln WHERE und HAVING sowie deren jeweilige Anwendungsbereiche verstehen:
- 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 Anwendung der HAVING-Klausel merken sollten. Kehren wir nun zur von der Schule gestellten Aufgabe zurück.
Swipe to start coding
Es müssen nur die Nachnamen der Studierenden abgerufen werden; es ist nicht erforderlich, die Anzahl ihrer Noten im Ergebnis einzuschließen. Verwenden Sie die HAVING-Klausel und die Aggregatfunktion COUNT(), um diese Aufgabe zu erfüllen. Sortieren Sie anschließend die Nachnamen in alphabetischer Reihenfolge.
Das Ergebnis soll nur eine Spalte mit Nachnamen enthalten.
Kurzanleitung
- Die Spalte
student_surnameabrufen. - Die Daten nach
student_surnamegruppieren. - Die
HAVING-Klausel verwenden, um die Ergebnisse mitCOUNT(grade) > 1zu filtern. - Die Ergebnisse nach
student_surnamesortieren.
Lösung
Danke für Ihr Feedback!
single