Articles

SQL GROUP BY und HAVING Klausel mit Beispielen

Was ist die SQL Group by Klausel?

Die GROUP BY-Klausel ist ein SQL-Befehl, der zum Gruppieren von Zeilen mit denselben Werten verwendet wird. 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 gruppierte Abfragen genannt und geben nur eine einzelne Zeile für jedes gruppierte Element 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 Group by-Abfrage an.

SELECT statements... GROUP BY column_name1 ;

HIER

  • „SELECT-Anweisungen…“ist der standard-SQL-Befehl SELECT-Abfrage.
  • „GROUP BY column_name1“ ist die Klausel, die die Gruppierung basierend auf column_name1 ausführt.
  • „“ ist optional; stellt andere Spaltennamen dar, wenn die Gruppierung für mehr als eine Spalte erfolgt.
  • „“ 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 den Effekt der SQL Group By-Klausel besser zu verstehen, führen wir eine einfache Abfrage aus, die alle Geschlechtereinträge aus der Members-Tabelle 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 –

Ausführen des obigen Skripts in MySQL Workbench gegen die Myflixdb gibt uns die folgenden Ergebnisse.,


gender

Female


Male


Hinweis: 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 zusammen und gab nur eine einzelne Zeile dafür zurück. Es tat das gleiche mit den „weiblichen“ Mitgliedern.

Gruppierung mit mehreren Spalten

Angenommen, wir möchten eine Liste der Filmkategory_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 hat viele Duplikate.

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 MySQL workbench gegen die myflixdb ausführen, erhalten Sie die folgenden unten gezeigten Ergebnisse.

Die GROUP BY-Klausel arbeitet sowohl mit der Kategorie-ID als auch mit der Jahres-ID, um eindeutige Zeilen in unserem obigen Beispiel zu identifizieren.,

Wenn die Kategorie-ID dieselbe ist, das veröffentlichte Jahr jedoch anders ist, wird eine Zeile als eindeutige behandelt .Wenn die Kategorie-ID und das veröffentlichte Jahr für mehr als eine Zeile gleich sind, wird sie als Duplikat betrachtet und nur eine Zeile wird angezeigt.

Gruppierung und Aggregatfunktionen

Angenommen, wir möchten die Gesamtzahl der Männer und Frauen in unserer Datenbank. Dazu können wir das unten gezeigte folgende Skript verwenden.

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

die Ausführung des obigen Skripts in MySQL workbench gegen die myflixdb gibt uns die folgenden Ergebnisse.,

gender COUNT('membership_number')
Female 3
Male 5

Die unten gezeigten Ergebnisse werden nach jedem eindeutigen Gender-Wert gruppiert und die Anzahl der gruppierten Zeilen wird mit der COUNT Aggregate-Funktion gezählt.

Einschränken von Abfrageergebnissen 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 wollen. In solchen Fällen können wir die HAVING Klausel

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;

Das Ausführen des obigen Skripts in MySQL Workbench für die Myflixdb gibt uns die folgenden unten gezeigten Ergebnisse.

movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Hinweis Nur Filme mit der Kategorie-ID 8 sind von unserer GROUP BY-Klausel betroffen.

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 SELECT-Anweisung, die in der GROUP BY-Klausel verwendet wird, kann nur Spaltennamen, Aggregatfunktionen, Konstanten und Ausdrücke enthalten.
  • SQL Having Klausel wird verwendet, um die von der GROUP BY Klausel zurückgegebenen Ergebnisse einzuschränken.
  • MYSQL GROUP BY Klausel wird verwendet, um Daten aus mehreren Datensätzen und zurückgegebenen Datensatz durch eine oder mehrere Spalten zu sammeln.