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.