Detaillierte Erklärung von Group By und Having in MySQL

Detaillierte Erklärung von Group By und Having in MySQL

Mit der GROUP BY-Syntax können die Abfrageergebnisse entsprechend den einzelnen Mitgliedern einer bestimmten Datenspalte gruppiert und gezählt und schließlich eine Gruppenzusammenfassungstabelle erstellt werden.

Der Spaltenname in der Select-Klausel muss eine Gruppierungsspalte oder eine Spaltenfunktion sein, die für jede durch die Group-By-Klausel definierte Gruppe ein Ergebnis zurückgibt.

Der Aufbau und die Daten einer Mitarbeiterinformationstabelle sind wie folgt:

  ID Name Abteilung Gehalt Bildungsstufe Einstellungsdatum 
  1 Zhang San Entwicklungsabteilung 2000 3 2009-10-11
  2 Li Si Entwicklungsabteilung 2500 3 2009-10-01
  3 Wang Wu Designabteilung 2600 5 2010-10-02
  4 Wang Liu Designabteilung 2300 4 2010-10-03
  5 Maqi Designabteilung 2100 4 2010-10-06
  6 Zhao Ba Verkaufsabteilung 3000 5 2010-10-05
  7 Qianjiu Verkaufsabteilung 3100 7 2010-10-07
  8 Sun Ten Verkaufsabteilung 3500 7 2010-10-06

Ich möchte das höchste Gehalt jeder Abteilung auflisten. Die SQL-Anweisung lautet wie folgt:

Wählen Sie Abteilung, Max (Gehalt) als Maximum
VON MITARBEITERN
GRUPPE NACH ABTEILUNG

Die Abfrageergebnisse lauten wie folgt:

Abt. MAXIMAL
Entwicklungsabteilung 4500
Konstruktionsabteilung 2600
Verkaufsabteilung 3500

Erklären Sie dieses Ergebnis:

1. „Der Spaltenname in der SELECT-Klausel muss eine Gruppierungsspalte oder eine Spaltenfunktion sein“ ist erfüllt, da die SELECT-Klausel eine in „group by“ enthaltene Spalte „dept“ enthält.

2. „Die Spaltenfunktion gibt für jede durch die Group-By-Klausel definierte Gruppe ein Ergebnis zurück.“ Entsprechend der Abteilungsgruppierung wird für jede Abteilung ein Ergebnis zurückgegeben, das dem höchsten Gehalt der jeweiligen Abteilung entspricht.

Verwenden der Where-Klausel mit der Group By-Klausel

Gruppierte Abfragen können eine standardmäßige Where-Klausel haben, die nicht qualifizierte Zeilen eliminiert, bevor die Gruppen und berechneten Spaltenfunktionen gebildet werden. Die Where-Klausel muss vor der Group-By-Klausel angegeben werden.

Fragen Sie beispielsweise nach dem höchsten Gehalt jeder Abteilung und jeder Ebene des Unternehmens, das 2010 eingetreten ist

SELECT dept,edlevel,MAX(Gehalt) AS MAXIMUM
VON MITARBEITERN
WO Einstellungsdatum > '01.01.2010'
GROUP BY Abteilung, Bildungsstufe

Die Abfrageergebnisse lauten wie folgt:

Abteilungsebene MAXIMAL
Konstruktionsabteilung 4 2300
Konstruktionsabteilung 5 2600
Verkaufsabteilung 5 3000
Verkaufsabteilung 7 3500

Jeder in der SELECT-Anweisung angegebene Spaltenname wird auch in der GROUP BY-Klausel erwähnt. Spaltennamen, die nicht an beiden Stellen erwähnt werden, erzeugen einen Fehler. Die GROUP BY-Klausel gibt für jede eindeutige Kombination aus „dept“ und „edlevel“ eine Zeile zurück.

Verwenden der Having-Klausel nach der GROUP BY-Klausel

Sie können Gruppierungen qualifizieren, sodass nur Ergebnisse für Gruppen zurückgegeben werden, die die Kriterien erfüllen. Daher wird nach der GROUP BY-Klausel eine HAVING-Klausel eingefügt. HAVING ist ähnlich wie WHERE (der einzige Unterschied besteht darin, dass WHERE Zeilen filtert, während HAVING Gruppen filtert). HAVING unterstützt alle WHERE-Operatoren.

So ermitteln Sie beispielsweise die höchsten und niedrigsten Gehälter für Abteilungen mit mehr als 2 Mitarbeitern:

SELECT dept ,MAX(Gehalt) AS MAXIMUM ,MIN(Gehalt) AS MINIMUM
VON MITARBEITERN
GROUP BY-Abteilung
MIT ANZAHL(*) > 2
BESTELLEN NACH Abteilung

Die Abfrageergebnisse lauten wie folgt:

Abt. MAXIMAL MINIMUM
Konstruktionsabteilung 2600 2100
Verkaufsabteilung 3500 3000

So ermitteln Sie beispielsweise die höchsten und niedrigsten Gehälter in Abteilungen, in denen das Durchschnittsgehalt der Mitarbeiter über 3000 liegt:

SELECT dept,MAX(Gehalt) AS MAXIMUM,MIN(Gehalt) AS MINIMUM
VON MITARBEITERN
GROUP BY-Abteilung
MIT DURCHSCHNITTLICHEM (Gehalt) > 3000
BESTELLEN NACH Abteilung

Die Abfrageergebnisse lauten wie folgt:

Abt. MAXIMAL MINIMUM
Verkaufsabteilung 3500 3000

Dies ist das Ende dieses Artikels über die detaillierte Verwendung von MySQL Group by und Having. Weitere relevante MySQL Group by-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der Group-By-Anweisung in der MySQL-Datenbankgruppenabfrage
  • MySQL effiziente Abfrage Left Join und Gruppieren nach (plus Index)
  • Detaillierte Erklärung der MySQL-Gruppierung durch Optimierung
  • So optimieren Sie MySQL-Gruppen nach Anweisungen
  • So verwenden Sie MySQL „group by“ und „order by“ gemeinsam
  • MySQL-Gruppe durch Gruppieren mehrerer Felder
  • Implementieren Sie Group By basierend auf MySQL, um die neuesten Daten jeder Gruppe zu erhalten
  • Eine kurze Erläuterung zu „Group By“ in MySQL

<<:  Linux-Betrieb und -Wartung – Tutorial zur grundlegenden Datenträgerverwaltung

>>:  Implementierungscode zur Verwendung von CSS-Texthervorhebung zum Hervorheben von Text

Artikel empfehlen

Detaillierte Untersuchung des Problems der Array-Deduplizierung in JavaScript

Inhaltsverzeichnis Vorwort 👀 Beginnen Sie mit der...

IDEA-Konfigurationsprozess von Docker

IDEA ist das am häufigsten verwendete Entwicklung...

mysql 8.0.18 mgr-Installation und seine Umschaltfunktion

1. Systeminstallationspaket yum -y install make g...

Vue implementiert die Shake-Funktion (kompatibel mit ios13.3 und höher)

Vor Kurzem habe ich mit shake.js eine ähnliche Fu...

Tabelle td Bild horizontal und vertikal zentriert Code

HTML Code: Code kopieren Der Code lautet wie folgt...

Eine detaillierte Analyse und Verarbeitung von MySQL-Alarmen

Vor kurzem hat ein Dienst einen Alarm ausgelöst, ...

Details der benutzerdefinierten Vue-Anweisung

Inhaltsverzeichnis 1. Hintergrund 2. Lokale benut...

Detailliertes Tutorial zum Konfigurieren der lokalen Yum-Quelle in CentOS8

Die Centos8-Distribution wird über die BaseOS- un...

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort vergessen?

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort ve...

Achten Sie bei der Webseitenerstellung auf die Verwendung von HTML-Tags

Dieser Artikel stellt einige Aspekte von HTML-Tag...

Detaillierte Schritte zur Entwicklung von WeChat-Miniprogrammen mit Typescript

Auf die Vorteile von Typescript müssen wir nicht ...