Was ist die SQL-Gruppe nach Klausel?
Die GROUP BY-Klausel ist ein SQL-Befehl, mit dem Zeilen mit denselben Werten gruppiert werden . Die GROUP BY-Klausel wird in der SELECT-Anweisung verwendet. Optional wird es in Verbindung mit Aggregatfunktionen verwendet, um zusammenfassende Berichte aus der Datenbank zu erstellen.
Das ist es, was es tut, Daten aus der Datenbank zusammenzufassen.
Die Abfragen, die die GROUP BY-Klausel enthalten, werden als gruppierte Abfragen bezeichnet und geben für jedes gruppierte Element nur eine einzige Zeile zurück.
SQL GROUP BY-Syntax
Nachdem wir nun wissen, was die SQL GROUP BY-Klausel ist, schauen wir uns die Syntax für eine grundlegende Gruppe nach Abfrage an.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
HIER
- "SELECT-Anweisungen ..." ist die Standard-SQL-SELECT-Befehlsabfrage.
- " GROUP BY column_name1" ist die Klausel, die die Gruppierung basierend auf column_name1 durchführt.
- "[, Spaltenname2,…]" ist optional; stellt andere Spaltennamen dar, wenn die Gruppierung für mehr als eine Spalte erfolgt.
- "[HAVING Bedingung]" ist optional; Es wird verwendet, um die von der GROUP BY-Klausel betroffenen Zeilen einzuschränken. Es ähnelt der WHERE-Klausel.
Gruppierung mit einer einzelnen Spalte
Um die Auswirkungen der SQL Group By-Klausel besser zu verstehen, führen wir eine einfache Abfrage aus, die alle Geschlechtseinträge aus der Mitgliedertabelle zurückgibt.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Angenommen, wir möchten die eindeutigen Werte für die Geschlechter erhalten. Wir können eine folgende Abfrage verwenden -
SELECT `gender` FROM `members` GROUP BY `gender`;
Wenn Sie das obige Skript in der MySQL-Workbench für die Myflixdb ausführen, erhalten Sie die folgenden Ergebnisse.
gender |
---|
Female |
Male |
Beachten Sie, dass nur zwei Ergebnisse zurückgegeben wurden. Dies liegt daran, dass wir nur zwei Geschlechtstypen haben: männlich und weiblich. Die GROUP BY-Klausel in SQL gruppierte alle "männlichen" Mitglieder und gab nur eine einzige Zeile dafür zurück. Dasselbe geschah mit den "weiblichen" Mitgliedern.
Gruppierung mit mehreren Spalten
Angenommen, wir möchten eine Liste der Filmkategorie_id und der entsprechenden Jahre erhalten, in denen sie veröffentlicht wurden.
Lassen Sie uns die Ausgabe dieser einfachen Abfrage beobachten
SELECT `category_id`,`year_released` FROM `movies` ;
category_id | year_released |
---|---|
1 | 2011 |
2 | 2008 |
NULL | 2008 |
NULL | 2010 |
8 | 2007 |
6 | 2007 |
6 | 2007 |
8 | 2005 |
NULL | 2012 |
7 | 1920 |
8 | NULL |
8 | 1920 |
Das obige Ergebnis weist viele Duplikate auf.
Lassen Sie uns dieselbe Abfrage mit group by in SQL ausführen -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Wenn Sie das obige Skript in der MySQL-Workbench für die myflixdb ausführen, erhalten Sie die folgenden Ergebnisse.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
Die GROUP BY-Klausel wirkt sich sowohl auf die Kategorie-ID als auch auf das veröffentlichte Jahr aus, um eindeutige Zeilen in unserem obigen Beispiel zu identifizieren .
Wenn die Kategorie-ID identisch ist, das veröffentlichte Jahr jedoch unterschiedlich ist, wird eine Zeile als eindeutig behandelt. Wenn die Kategorie-ID und das veröffentlichte Jahr für mehr als eine Zeile identisch sind, wird sie als Duplikat und nur als eine Zeile betrachtet wird gezeigt.
Gruppierungs- und Aggregatfunktionen
Angenommen, wir möchten die Gesamtzahl der Männer und Frauen in unserer Datenbank. Wir können das folgende Skript verwenden, um dies zu tun.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Wenn Sie das obige Skript in der MySQL-Workbench gegen die myflixdb ausführen, erhalten Sie die folgenden Ergebnisse.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Die unten gezeigten Ergebnisse werden nach jedem eindeutigen veröffentlichten Geschlechterwert gruppiert und die Anzahl der gruppierten Zeilen wird mithilfe der COUNT-Aggregatfunktion gezählt.
Einschränken der Abfrageergebnisse mithilfe der HAVING- Klausel
Es ist nicht immer so, dass wir Gruppierungen für alle Daten in einer bestimmten Tabelle durchführen möchten. Es wird Zeiten geben, in denen wir unsere Ergebnisse auf bestimmte Kriterien beschränken möchten. In solchen Fällen können wir die HAVING-Klausel verwenden
Angenommen, wir möchten alle Veröffentlichungsjahre für die Filmkategorie ID 8 kennen. Wir würden das folgende Skript verwenden, um unsere Ergebnisse zu erzielen.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Wenn Sie das obige Skript in der MySQL-Workbench für die Myflixdb ausführen, erhalten Sie die folgenden Ergebnisse.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Beachten Sie, dass nur Filme mit der Kategorie ID 8 von unserer GROUP BY-Klausel betroffen sind.
Zusammenfassung
- Die GROUP BY-Klausel SQL wird verwendet, um Zeilen mit denselben Werten zu gruppieren.
- Die GROUP BY-Klausel wird zusammen mit der SQL SELECT-Anweisung verwendet.
- Die in der GROUP BY-Klausel verwendete SELECT-Anweisung kann nur Spaltennamen, Aggregatfunktionen, Konstanten und Ausdrücke enthalten.
- Die SQL-Have-Klausel wird verwendet, um die von der GROUP BY-Klausel zurückgegebenen Ergebnisse einzuschränken.
- Die MYSQL GROUP BY-Klausel wird verwendet, um Daten aus mehreren Datensätzen zu erfassen und einen Datensatz zurückzugeben, der durch eine oder mehrere Spalten festgelegt wurde.