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];

HIER KLICKEN

  • โ€žSELECT-Anweisungenโ€ฆโ€œ ist die standardmรครŸige SQL-SELECT-Befehlsabfrage.
  • "GRUPPIERE NACH Spaltenname1" ist die Klausel, die die Gruppenfunktion ausfรผhrtping basierend auf column_name1.
  • โ€œ[,column_name2,โ€ฆ]โ€ ist optional; es reprรคsentiert andere Spaltennamen, wenn die Gruppeping wird in mehr als einer Spalte durchgefรผhrt.
  • โ€ž[HAVING-Bedingung]โ€œ ist optional; Sie wird verwendet, um die von der GROUP BY-Klausel betroffenen Zeilen einzuschrรคnken. Es รคhnelt dem WHERE-Klausel.

Grouping Verwendung eines 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.

Grouping mit automatisierten 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 Unvergesslich 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.

Grouping 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 Gruppenauftritte machen wollen.pingDie HAVING-Klausel wird auf alle Daten in einer gegebenen Tabelle angewendet. Es wird jedoch Fรคlle 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.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: