Gruppieren nach mehreren Spalten in MySQL
In diesem Tutorial möchten wir verstehen, wie der Befehl GROUP BY
mit zwei oder mehr Spalten verwendet wird.
Der MySQL-Befehl GROUP BY
ist eine Technik, mit der wir Datensätze mit identischen Werten basierend auf bestimmten Kriterien, die zum Zweck der Gruppierung definiert wurden, zusammenfassen können. Wenn wir versuchen, Daten unter Berücksichtigung nur einer einzigen Spalte zu gruppieren, werden alle Datensätze mit denselben Werten, für die die Kriterien definiert sind, in einer einzigen Ausgabe zusammengeführt.
MySQL ermöglicht es Benutzern jedoch, Daten nicht nur mit einer einzigen Spalte zu gruppieren, sondern auch mit mehreren Spalten. Wir werden diese Technik im letzten Abschnitt dieses Tutorials untersuchen. Zusammenfassend lässt sich sagen, dass wir, wenn wir versuchen, unter Berücksichtigung mehrerer Spalten zu gruppieren, ein Ergebnis erhalten, bei dem die Gruppierung der Spaltenwerte in Bezug auf mehr als eine Spalte zusammen mit einem Gruppierungskriterium erfolgt.
Auch wenn dieses Konzept schwer umzusetzen klingen mag, betrachten wir zunächst eine Spalte in unserem GROUP BY
-Statement.
Bevor wir jedoch beginnen, erstellen wir ein Dummy-Dataset, mit dem wir arbeiten können. Hier erstellen wir eine Tabelle, student_details
, zusammen mit einigen Zeilen darin.
-- create the table student_details
CREATE TABLE student_details(
stu_id int,
stu_firstName varchar(255) DEFAULT NULL,
stu_grade int,
stu_lastName varchar(255) DEFAULT NULL,
primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_grade,stu_lastName)
VALUES(1,"Preet",40,"Sanghavi"),
(2,"Rich",50,"John"),
(3,"Veron",60,"Brow"),
(4,"Geo",70,"Jos"),
(5,"Hash",80,"Shah"),
(6,"Sachin",90,"Parker"),
(7,"David",25,"Miller"),
(8,"Richa",50,"Joh"),
(9,"Verona",60,"Brow"),
(10,"Geoa",70,"Josh"),
(11,"Hasha",80,"Ash"),
(12,"Allen",90,"Parker");
Die obige Abfrage erstellt eine Tabelle zusammen mit Zeilen mit dem Vor- und Nachnamen des Schülers. Um die Einträge in den Daten einzusehen, verwenden wir folgenden Code:
SELECT * FROM student_details;
Der obige Code würde die folgende Ausgabe ergeben:
stu_id stu_firstName stu_grade stu_lastName
1 Preet 40 Sanghavi
2 Rich 50 John
3 Veron 60 Brow
4 Geo 70 Jos
5 Hash 80 Shah
6 Sachin 90 Parker
7 David 25 Miller
8 Richa 50 Joh
9 Verona 60 Brow
10 Geoa 70 Josh
11 Hasha 80 Ash
12 Allen 90 Parker
Versuchen wir nun, die Verwendung einer einfachen GROUP BY
-Anweisung zu verstehen, um stu_lastName
mit der Summe von stu_grade
als Aggregatklausel zu gruppieren.
Die Group By
-Anweisung in MySQL
Wie wir wissen, hilft uns die Anweisung GROUP BY
, Datensätze zu gruppieren, die dieselben Werte für die definierten Kriterien besitzen. Die grundlegende Syntax der GROUP BY
-Anweisung lautet wie folgt:
SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1;
Wir können die Summe der Punktzahlen für Schüler mit demselben Nachnamen wie folgt ermitteln:
SELECT SUM(stu_grade), stu_lastName FROM student_details
GROUP BY stu_lastName;
Der oben genannte Code gibt die folgende Ausgabe aus:
SUM(stu_grade) stu_lastName
40 Sanghavi
50 John
120 Brow
70 Jos
80 Shah
180 Parker
25 Miller
50 Joh
70 Josh
80 Ash
Die GROUP BY
-Anweisung in MySQL mit mehreren Spalten
Wie oben gesehen, bietet MySQL die Funktionalität zum Gruppieren von Datensätzen basierend auf einem Kriterium. Eine weitere Ergänzung dieser Methode besteht darin, dass wir mehr als eine Spalte aus der Tabelle gleichzeitig gruppieren können. Die Syntax zum Gruppieren von mehr als einer Spalte in MySQL kann wie folgt geschrieben werden:
SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1, criteria_col_2, criteria_col_3;
Wie wir oben sehen können, sind criteria_col_1
, criteria_col_2
und criteria_col_3
die drei Spalten, die in der GROUP BY
-Klausel enthalten sind.
Versuchen wir nun, den Vor- und Nachnamen der Schüler anhand der Summe ihrer Noten als Aggregatfunktion zu gruppieren. Wir können diese Operation mit dem folgenden Code ausführen:
SELECT SUM(stu_grade), stu_lastName, stu_firstName
FROM student_details
GROUP BY stu_lastName, stu_firstName;
Die Ausgabe des obigen Codes ist wie folgt:
SUM(stu_grade) stu_lastName stu_firstName
40 Sanghavi Preet
50 John Rich
60 Brow Veron
70 Jos Geo
80 Shah Hash
90 Parker Sachin
25 Miller David
50 Joh Richa
60 Brow Verona
70 Josh Geoa
80 Ash Hasha
90 Parker Allen
Wie wir sehen, gruppiert die Ausgabe sowohl die Spalten stu_firstName
als auch stu_lastName
. Ebenso können wir mehrere Spalten in MySQL gruppieren. Daher kann die Anweisung GROUP BY
mit den oben genannten Methoden effizient mit einer oder mehreren Spalten verwendet werden.