Eine kurze Erläuterung der Verwendung von GROUP BY und HAVING in SQL-Anweisungen

Eine kurze Erläuterung der Verwendung von GROUP BY und HAVING in SQL-Anweisungen

Bevor wir die GROUP BY- und HAVING-Klauseln vorstellen, müssen wir zunächst über eine spezielle Funktion in der SQL-Sprache sprechen: Aggregatfunktionen.

Zum Beispiel SUM, COUNT, MAX, AVG usw. Der grundlegende Unterschied zwischen diesen Funktionen und anderen Funktionen besteht darin, dass sie im Allgemeinen auf mehrere Datensätze einwirken.

Wählen Sie SUM (Bevölkerung) aus BBC

Die SUMME wird hier auf das Bevölkerungsfeld aller zurückgegebenen Datensätze angewendet, sodass die Abfrage nur ein Ergebnis zurückgibt, nämlich die Gesamtbevölkerung aller Länder.

Having ist die Screening-Bedingung nach der Gruppierung (group by), und die gruppierten Daten werden innerhalb der Gruppe weiter gescreent
wo soll vor der Gruppierung gefiltert werden

Mithilfe der GROUP BY-Klausel können Sie Funktionen wie SUM und COUNT auf Daten anwenden, die zu einer Gruppe gehören.

Wenn Sie GROUP BY Region angeben, gibt eine Gruppe von Daten, die zur selben Region gehören, nur eine Wertezeile zurück.

Das bedeutet, dass alle Felder in der Tabelle außer „Region“ erst dann einen Wert zurückgeben können, wenn sie durch Aggregatfunktionen wie SUM und COUNT berechnet wurden.

Mit der HAVING-Klausel können wir die Datengruppen filtern.

Die WHERE-Klausel filtert die Datensätze vor der Aggregation. Das heißt, es funktioniert vor der GROUP BY-Klausel und der HAVING-Klausel.

Die HAVING-Klausel filtert die Gruppendatensätze nach der Aggregation.

Lassen Sie uns die GROUP BY- und HAVING-Klauseln anhand konkreter Beispiele verstehen und die in Abschnitt 3 vorgestellte BBC-Tabelle verwenden.

SQL-Beispiel:

1. Zeigen Sie die Gesamtbevölkerung und die Gesamtfläche jeder Region an.

SELECT Region, SUM(Bevölkerung), SUM(Fläche)
VON BBC
GROUP BY-Region

Verwenden Sie zunächst „Region“, um die zurückgegebenen Datensätze in mehrere Gruppen aufzuteilen. Dies ist die wörtliche Bedeutung von GROUP BY. Nachdem die Gruppen gebildet wurden, werden Aggregatfunktionen verwendet, um verschiedene Felder in jeder Gruppe (ein oder mehrere Datensätze) zu bearbeiten.

2. Zeigen Sie die Gesamtbevölkerung und die Gesamtfläche jeder Region an. Es werden nur Regionen mit einer Fläche von über 1.000.000 angezeigt.

SELECT Region, SUM(Bevölkerung), SUM(Fläche)

VON bbc8 F4 w2 v( P- f
GROUP BY-Region
HAVING SUM(Bereich)>1000000#

Hier können wir „where“ nicht verwenden, um Regionen mit mehr als 1.000.000 zu filtern, da ein solcher Datensatz in der Tabelle nicht vorhanden ist.
Im Gegenteil, die HAVING-Klausel ermöglicht es uns, die Datengruppen nach der Gruppierung zu filtern.

3. Abfrage der Anzahl der Bestellungen für Benutzer in den Tabellen KUNDE und BESTELLUNG

Wählen Sie c.name, Anzahl (Bestellnummer) als Anzahl der Bestellungen o, Kunde c, wobei c.id = o.Kunden-ID, gruppieren Sie nach Kunden-ID;
+--------+-------+
| Name | Anzahl |
+--------+-------+
| d | 9 |
| cc | 6 |
| Bodhisamen | 1 |
| cccccc | 2 |
+--------+-------+

HAVING-Filter hinzufügen

Wählen Sie c.name, Anzahl(Bestellnummer) als Anzahl der Bestellungen o, Kunde c, wobei c.id=o.Kunden-ID, gruppieren Sie nach Kunden-ID mit Anzahl(Bestellnummer)>5;
+------+--------+
| Name | Anzahl |
+------+--------+
| d | 9 |
| cc | 6 |
+------+--------+

4. Ich werde noch einige Beispiele geben

SQL> wähle * aus sc;

 SNO PNO-GRAD
---------- ----- ----------
  1. Jahr 95
  1 SX 98
  1 JJ 90
  2. Jahr 89
  2 SX 91
  2 JJ 92
  3. Jahr 85
  3 SX 88
  3 JJ 96
  4. Jahr 95
  4 SX 89

 SNO PNO-GRAD
---------- ----- ----------
  4 JJ 88

Diese Tabelle beschreibt die Aufzeichnungen der akademischen Leistungen von 4 Studenten in jedem Fach, einschließlich SNO (Matrikelnummer), PNO (Kursname) und GRADE (Note).

1. Zeigen Sie die Kursnamen und Noten von Studenten mit Noten über 90 an

//Dies ist eine einfache Abfrage und verwendet keine Gruppierungsabfrage

SQL> wähle sno, pno, grade aus sc, wobei grade>=90;
 SNO PNO-GRAD
---------- ----- ----------
  1. Jahr 95
  1 SX 98
  1 JJ 90
  2 SX 91
  2 JJ 92
  3 JJ 96
  4. Jahr 95

7 Zeilen ausgewählt.

2. Zeigen Sie die Anzahl der Fächer an, in denen die Punktzahl jedes Schülers über 90 Punkte liegt

//In Gruppen anzeigen und gemäß der Where-Bedingung zählen SQL> select sno,count(*) from sc where grade>=90 group by sno;
 SNO-ANZAHL(*)
---------- ----------
  1 3
  zweiundzwanzig
  4 1
  3 1

3. Wir haben die Having-Anweisung hier nicht verwendet. Wenn wir als nächstes drei gute Studenten auswählen möchten, ist die Bedingung, dass mindestens zwei Kurse über 90 Punkte liegen, um infrage zu kommen. Listen Sie die Anzahl der infrage kommenden Studenten und die Anzahl der Kurse über 90 Punkte auf.

// In Gruppen anzeigen, gemäß der Where-Bedingung zählen und die Gruppen gemäß der Having-Klausel filtern SQL> select sno,count(*) from sc where grade>=90 group by sno having count(*)>=2;
 SNO-ANZAHL(*)
---------- ----------
  1 3
  zweiundzwanzig

Dieses Ergebnis ist das, was wir wollen. Es listet die Studentennummern auf, die für die Auszeichnung „Drei gute Studenten“ in Frage kommen. Im Vergleich zum vorherigen Beispiel können wir sehen, dass dies eine Unterabfrage ist, die nach der Gruppierung ausgeführt wird.

4. Die Schule wählt fortgeschrittene Schüler aus. Schüler mit einem Durchschnittsergebnis von mehr als 90 Punkten sind teilnahmeberechtigt und die Punktzahl im Chinesischkurs muss über 95 Punkte liegen. Bitte listen Sie die teilnahmeberechtigten Schüler auf.

//Tatsächlich extrahiert diese Abfrage zuerst die Nummern der Studenten, deren Chinesisch-Punktzahl über 95 liegt, berechnet dann den Durchschnitt und wählt dann nach der Gruppierung gemäß der Having-Anweisung die Studenten aus, deren Durchschnittspunktzahl über 90 liegt. SQL> select sno,avg(grade) from sc where SNO IN (SELECT SNO FROM SC WHERE GRADE>=95 AND PNO='YW') group by sno having avg(grade)>=90;
 SNO-Durchschnitt (Note)
---------- ----------
  1 94,3333333
  4 90,6666667

5. Abfrage des Studierendenausweises und der Durchschnittsnote von Studierenden, deren Durchschnittsnote mindestens höher ist als die Durchschnittsnote des Studierendenausweises 3

//Vergleiche und Unterabfragen können in der Having-Klausel durchgeführt werden SQL> select sno,avg(grade) from sc
 Gruppe nach sno
 mit Durchschnitt(Note) > (wählen Sie Durchschnitt(Note) aus sc, wobei sno=3);

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • MySQL-Gruppe mit Beispielcode
  • Untersuchung des Problems der direkten Verwendung der HAVING-Anweisung ohne GROUP BY in MySQL
  • Hinweise zur Verwendung von „Group By“ und „Having Together“ in MySQL
  • Detaillierte Analyse der Unterschiede zwischen „order by“, „group by“ und „having“ in MySQL

<<:  Eine kurze Analyse der Verwendung der Coredump-Technologie zur Ermittlung der Ursache von Prozessabstürzen in Linux

>>:  Paketieren, Zusammenführen und Komprimieren von Vue-Projekten zur Optimierung der Reaktionsgeschwindigkeit von Webseiten

Artikel empfehlen

Detailliertes Tutorial zur Installation von PHP und Nginx auf Centos7

Da die Anwendung von CentOS auf der Serverseite i...

So zeigen Sie Versionsinformationen in Linux an

So zeigen Sie Versionsinformationen unter Linux a...

Problem mit der Iframe-QRC-Zuweisung (serverseitig)

Ich bin heute auf dieses Problem gestoßen. Ich hab...

So importieren Sie CSS-Stile in externe HTML-Stylesheets

Der Link-In-Stil besteht darin, alle Stile in ein...

So laden Sie die Kamera in HTML

Wirkungsdiagramm: Gesamtwirkung: Video wird gelad...

Analyse der Fallstricke beim Rundungsvorgang der ROUND-Funktion in MySQL

Dieser Artikel veranschaulicht anhand von Beispie...

Einführung in die Verwendung von CSS3-Farbwerten (RGBA) und Farbverlaufsfarben

Vor CSS3 konnten Verlaufsbilder nur als Hintergru...

Zusammenfassung der benutzerdefinierten JavaScript-Objektmethoden

Inhaltsverzeichnis 1. Verwenden Sie Objekt, um ei...

Auszeichnungssprachen – Was lernen, nachdem man HTML gelernt hat?

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Unterschiede zwischen Windows Server 2008R2, 2012, 2016 und 2019

Inhaltsverzeichnis Allgemeine Versionseinführung ...

Implementierung eines Bootstrap-Webseiten-Layoutrasters

Inhaltsverzeichnis 1. So funktioniert das Bootstr...