Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Having-Klausel | Gruppierung
Fortgeschrittene SQL
course content

Kursinhalt

Fortgeschrittene SQL

Fortgeschrittene SQL

1. Gruppierung
2. Verschachtelte Unterabfragen
3. Tabellen Verbinden
4. DDL und DML in SQL

book
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:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

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 der department-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:

  1. Die WHERE-Klausel wird vor der Datenaggregation verwendet, während die HAVING-Klausel nach der Datenaggregation eingesetzt wird;
  2. Die WHERE-Klausel wird vor GROUP BY geschrieben, während die HAVING-Klausel nach GROUP 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.

Aufgabe

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 auf COUNT(grade) > 1 zu filtern.
  • Sortiere das Ergebnis nach student_surname.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 6
toggle bottom row

book
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:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

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 der department-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:

  1. Die WHERE-Klausel wird vor der Datenaggregation verwendet, während die HAVING-Klausel nach der Datenaggregation eingesetzt wird;
  2. Die WHERE-Klausel wird vor GROUP BY geschrieben, während die HAVING-Klausel nach GROUP 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.

Aufgabe

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 auf COUNT(grade) > 1 zu filtern.
  • Sortiere das Ergebnis nach student_surname.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 6
Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
We're sorry to hear that something went wrong. What happened?
some-alt