SQL GROUP BY- und HAVING-Klausel mit Beispielen
Was ist die SQL Group by-Klausel?
Die GROUP BY-Klausel ist ein SQL-Befehl, der verwendet wird Gruppieren Sie Zeilen mit denselben Werten. 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 zusammenfassen aus der Datenbank.
Die Abfragen, die die GROUP BY-Klausel enthalten, werden als gruppierte Abfragen bezeichnet und geben für jedes gruppierte Element nur eine einzelne 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 einfache Gruppierung nach-Abfrage an.
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];
KLICKEN SIE HIER
- „SELECT-Anweisungen…“ ist die standardmäßige SQL-SELECT-Befehlsabfrage.
- "GRUPPIERE NACH Spaltenname1„ ist die Klausel, die die Gruppierung basierend auf Spaltenname1 durchführt.
- „[,Spaltenname2,…]“ ist optional; stellt andere Spaltennamen dar, wenn die Gruppierung für mehr als eine Spalte erfolgt.
- „[HAVING-Bedingung]“ ist optional; Sie wird verwendet, um die von der GROUP BY-Klausel betroffenen Zeilen einzuschränken. Es ähnelt dem WHERE-Klausel.
Gruppierung mit a Einzelne Spalte
Um die Wirkung 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 Geschlechter erhalten. Wir können eine folgende Abfrage verwenden –
SELECT `gender` FROM `members` GROUP BY `gender`;
Ausführen des obigen Skripts in MySQL Werkbank gegen Myflixdb liefert uns folgende Ergebnisse.
gender |
---|
Female |
Male |
Beachten Sie, dass nur zwei Ergebnisse zurückgegeben wurden. Das 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 dafür nur eine einzige Zeile zurück. Dasselbe geschah mit den „weiblichen“ Mitgliedern.
Gruppieren mit mehrere spalten
Angenommen, wir möchten eine Liste der Filmkategorie-IDs und der entsprechenden Erscheinungsjahre erhalten.
Schauen wir uns die Ausgabe dieser einfachen Abfrage an
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`;
Ausführen des obigen Skripts in MySQL Workbench gegen myflixdb liefert uns die folgenden, unten dargestellten 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 verwendet sowohl die Kategorie-ID als auch das Erscheinungsjahr, um einzigartiges Zeilen in unserem obigen Beispiel.
Wenn die Kategorie-ID identisch ist, aber das Erscheinungsjahr unterschiedlich ist, wird eine Zeile als eindeutig behandelt. Wenn die Kategorie-ID und das Erscheinungsjahr für mehr als eine Zeile gleich sind, wird sie als Duplikat und nur für eine Zeile betrachtet wird gezeigt.
Gruppierung und Aggregatfunktionen
Angenommen, wir möchten die Gesamtzahl der Männer und Frauen in unserer Datenbank. Dazu können wir das folgende unten gezeigte Skript verwenden.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Ausführen des obigen Skripts in MySQL Workbench gegen myflixdb liefert uns folgende Ergebnisse.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Die unten angezeigten Ergebnisse werden nach jedem veröffentlichten eindeutigen Geschlechtswert gruppiert und die Anzahl der gruppierten Zeilen wird mithilfe der Aggregatfunktion COUNT gezählt.
Einschränken der Abfrageergebnisse mithilfe von HABEN Klausel
Es ist nicht immer so, dass wir alle Daten in einer bestimmten Tabelle gruppieren 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 Erscheinungsjahre für die Filmkategorie-ID 8 wissen. 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;
Ausführen des obigen Skripts in MySQL Workbench gegen Myflixdb liefert uns die folgenden, unten dargestellten 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-SQL-Klausel wird verwendet, um Zeilen mit gleichen Werten zu gruppieren.
- Die GROUP BY-Klausel wird zusammen mit verwendet SQL-SELECT-Anweisung.
- Die in der GROUP BY-Klausel verwendete SELECT-Anweisung kann nur Spaltennamen, Aggregatfunktionen, Konstanten und Ausdrücke enthalten.
- Die SQL-Having-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 sammeln und Datensätze zurückzugeben, die durch eine oder mehrere Spalten festgelegt sind.