Zurück zur Artikelliste Artikel
7 Leseminuten

Was ist GROUP BY in SQL?

GROUP BY ist eine großartige SQL-Funktion, mit der Sie leistungsstarke Berechnungen mit gruppierten Daten durchführen können. Möchten Sie lernen, wie Sie aus Ihren Daten aussagekräftige Erkenntnisse gewinnen können? Möchten Sie wissen, was GROUP BY tut und wann Sie es verwenden sollten? Wenn ja, lesen Sie weiter. In diesem Artikel werden Sie genau das erfahren.

Warum Sie GROUP BY brauchen

In der heutigen digitalisierten Welt - ganz gleich, in welcher Branche Sie tätig sind - sind Datenbanktabellen in der Regel riesig und enthalten Millionen von Datensätzen. Um sich mit solchen Daten vertraut zu machen, reicht es nicht aus, zu wissen, wie man SELECT-Anweisungen verwendet. Eines der ersten Dinge, die Sie beim Umgang mit großen Datenmengen lernen sollten, ist die Verwendung der SQL GROUP BY Konstruktion. Mit dieser leistungsstarken Funktion können Sie Ihre Daten nach einem gemeinsamen Attribut gruppieren und anschließend für jede dieser Gruppen separate Berechnungen durchführen.

Wenn Sie GROUP BY benötigen

Sie können also GROUP BY verwenden, wenn Sie Datensätze gruppieren und dann einige Berechnungen für jede Gruppe durchführen und die Ergebnisse anzeigen möchten. Die nächste Frage ist, wann - in welchen Situationen oder Geschäftsszenarien - ist es sinnvoll, die GROUP BY Klausel zu verwenden?

Nun, SQL GROUP BY wird in verschiedenen Branchen und Geschäftsbereichen häufig verwendet. Ein Beispiel:

  • Im Vertrieb können Sie GROUP BY verwenden, um die Gesamtzahl der verkauften Produkte auf Produkt- oder Kategorieebene zu berechnen.
  • Die Personalabteilung könnte Sie bitten, das Durchschnittsgehalt für jede Abteilung des Unternehmens anhand einer Tabelle zu berechnen, die Informationen über die Mitarbeiter, ihre Gehälter und ihre Abteilungen enthält.
  • Im Bankensektor kann die Gesamtzahl der aktiven Kunden im Vergleich zu den nicht aktiven Kunden mit Hilfe der Konstruktion GROUP BY berechnet werden.
  • Im öffentlichen Gesundheitswesen oder in der Medizin kann man die Gesamtzahl der bestätigten COVID-Fälle für jedes Land und jede Provinz mit GROUP BY berechnen.

Eines ist sicher - es gibt viele verschiedene Geschäftsszenarien, in denen GROUP BY nützlich ist. Unabhängig davon, wo Sie als SQL-Analyst arbeiten, werden Sie sicherlich jeden Tag mit GROUP BY zu tun haben.

Jetzt ist es an der Zeit zu lernen, wie man die GROUP BY Klausel verwendet. Beginnen wir mit ihrer Syntax.

GROUP BY-Syntax

Die Syntax von GROUP BY lässt sich am einfachsten anhand eines Beispiels erklären, also schauen wir uns zunächst die movies Tabelle (siehe unten):

idtitledirectorproduction_year
1PsychoAlfred Hitchcock1960
3Sweet and LowdownWoody Allen1993
4Talk to HerPedro Almodovar2002
2Midnight in ParisWoody Allen2011
8The Skin I Live InPedro Almodovar2011

Wie Sie sehen können, wird jeder Film durch einen Datensatz in der Tabelle dargestellt. Für jeden Film enthält die Tabelle Informationen über den Regisseur und das Produktionsjahr.

Einige Filme werden von ein und demselben Regisseur gedreht. Wenn Sie die Anzahl der Filme jedes Regisseurs anzeigen möchten, können Sie GROUP BY wie folgt verwenden:

SELECT director,
      count(*) AS number_of_movies
FROM movies
GROUP BY director;

Hier ist eine kurze Erklärung, was in dieser Abfrage vor sich geht:

  • Diese SQL-Anweisung gruppiert Datensätze nach der Spalte director. Dies wird durch das Schlüsselwort GROUP BY gekennzeichnet, gefolgt vom Namen der Spalte, nach der die Datensätze gruppiert werden (in unserem Fall ist die Spalte director).
  • Die Gruppierungsspalte muss ebenfalls nach dem SELECT Schlüsselwort stehen (d. h. innerhalb der SELECT). Das bedeutet, dass die Direktoren auf dem Ausgabebildschirm angezeigt werden und spezifische Berechnungen für jede Gruppe (für jeden Direktor) separat durchgeführt werden.
  • Es gibt drei Gruppen von Datensätzen, weil wir drei verschiedene Regisseure in unserer Filmtabelle haben (Alfred Hitchcock, Woody Allen und Pedro Almodovar).
  • Die Funktion COUNT(*) wird für jede Gruppe ausgeführt. Sie zählt alle Zeilen innerhalb jeder Gruppe.

Die resultierende Tabelle zeigt uns die Gesamtzahl der Filme für jeden Regisseur:

directornumber_of_movies
Alfred Hitchcock1
Woody Allen2
Pedro Almodovar2

Beachten Sie, wie die Ergebniszeilen zusammengeklappt sind - jede Gruppe wird in einer Zeile angezeigt. Aus diesem Grund enthält die Tabelle drei Zeilen statt fünf (die Anzahl der Zeilen in der Tabelle); es gibt drei Gruppen.

Wie GROUP BY funktioniert

Jetzt wissen Sie, was die SQL-Engine als Ergebnis unserer GROUP BY anzeigen wird. Aber wie funktioniert GROUP BY eigentlich? Sehen Sie sich die folgende Animation an:

GROUP BY

Wie Sie aus dieser Animation ersehen können, gruppiert die SQL-Engine zunächst die Zeilen nach einem bestimmten Schlüssel - in unserem Fall die Spalte Regisseur. Alfred-Hitchcock-Filme sind in einer Gruppe, Woody-Allen-Filme in einer anderen und Pedro Almodovar in einer dritten. Nach der Gruppierung wird jede Gruppe einzeln gezählt, und das Ergebnis wird angezeigt. In diesem Fall zählt die Funktion COUNT() die Gesamtzahl der Filme für jeden Regisseur.

Vielleicht sind Sie schon einmal auf die SQL-Klausel ORDER BY gestoßen und sind sich über den Unterschied zwischen dem Ordnen und Gruppieren von Zeilen nicht sicher. Wenn ja, empfehle ich Ihnen, einen Blick auf den Unterschied zwischen GROUP BY und ORDER BY in einfachen Worten zu werfen.

Mehrere Berechnungen in einer GROUP BY

In unserem vorherigen Beispiel haben wir die Datensätze (Filme) für jeden Regisseur einzeln gezählt. Es gibt eine Menge anderer Statistiken, die Sie in einer GROUP BY Klausel verwenden können. Anstatt einzelne Zeilen zu zählen, können Sie beispielsweise mit der Funktion AVG() den Durchschnittswert für jede Gruppe berechnen oder mit SUM() Summen berechnen. Sie können auch die Funktionen MIN() oder MAX() verwenden, um die kleinsten (min) oder größten (max) Werte aus jeder Gruppe abzurufen. Wir nennen solche Funktionen Aggregatfunktionen, weil sie Berechnungen mit Gruppen von Werten durchführen und als Ergebnis einen einzigen Wert zurückgeben.

Sehen wir uns ein kurzes Beispiel für die Verwendung von GROUP BY mit Aggregatfunktionen an. In dieser Abfrage können Sie den frühesten/letzten Film eines jeden Regisseurs anzeigen:

SELECT director,
      min(production_year) AS the_earliest_film_made,
      max(production_year) AS the_latest_film_made
FROM movies 
GROUP BY director;

Hier verwenden wir die Funktionen MIN() und MAX(), um die gewünschten Informationen abzurufen. Wir haben zwei Funktionen verwendet, weil wir zwei verschiedene Statistiken für jede Gruppe von Datensätzen abrufen wollen. Das ist eine weitere gute Eigenschaft von GROUP BY - Sie können verschiedene Berechnungen in einer SQL-Anweisung durchführen.

Hier ist das Ergebnis:

directorthe_earliest_film_madethe_latest_film_made
Alfred Hitchcock19601960
Woody Allen19932011
Pedro Almodovar20022011

Beachten Sie, dass die Mindest- und Höchstwerte von Alfred Hitchcock gleich sind. Das liegt daran, dass es in unserer Tabelle nur einen Film von ihm gibt; daher geben MIN() und MAX() denselben Wert zurück. Andere Regisseure in der Tabelle movies Tabelle haben mehr Filme in ihrem Portfolio, daher haben sie andere Werte.

Wir können hier nicht näher auf Aggregatfunktionen eingehen; eine ausführliche Erklärung über Aggregatfunktionen und ihre Verwendung mit GROUP BY finden Sie in unserem Artikel A Beginner's Guide to SQL Aggregate Functions.

GROUP BY mit mehreren Spalten

Im vorherigen Beispiel haben wir gesehen, dass es möglich ist, mehr als eine Berechnung in einer GROUP BY Anweisung durchzuführen. Ebenso ist es möglich, Zeilen auf der Grundlage von mehr als einer Spalte zu gruppieren. Dies bedeutet, dass jede spezifische Gruppe in der Ausgabe durch mehr als einen Spaltenwert definiert ist.

Angenommen, unsere movies Tabelle hat auch ein Genre-Attribut für jeden der Filme:

idtitledirectorproduction_yeargenre
1PsychoAlfred Hitchcock1960thriller
3Sweet and LowdownWoody Allen1993comedy/drama
4Talk to HerPedro Almodovar2002romance/drama
2Midnight in ParisWoody Allen2011comedy/drama
8The Skin I Live InPedro Almodovar2011thriller/drama

Anstatt Zeilen nach Regisseur zu gruppieren, könnten wir sie nach Regisseur und Genre gruppieren, um die Anzahl der Filme jedes Regisseurs in jedem Genre zu berechnen:

SELECT director,
      genre,
      count(*) as number_of_movies 
FROM movies
GROUP BY director, genre;

Hier ist eine kurze Erläuterung der obigen Abfrage:

  • Innerhalb der GROUP BY haben wir zwei Spalten: Regisseur und Genre. Diese beiden Spalten werden auch nach dem SELECT definiert. Denken Sie daran, dass Sie alle Spalten aus dem GROUP BY innerhalb des SELECT auflisten müssen.
  • In diesem Beispiel wird jede Gruppe durch einen Regisseur und ein Genre definiert. Das bedeutet, dass wir Pedro Almodovars Thriller/Drama-Filme als eine Gruppe und seine Romantik/Drama-Filme als eine andere Gruppe unterscheiden. Somit haben wir vier Zeilen (nicht drei) in der Ausgabe:
directorgenrenumber_of_movies
Alfred Hitchcockthriller1
Woody Allencomedy/drama2
Pedro Almodovarromance/drama1
Pedro Almodovarthriller/drama1

th style="background-color:#37c591"

Toll, nicht wahr? Inzwischen haben Sie wahrscheinlich verstanden, dass GROUP BY eine sehr leistungsfähige und effektive SQL-Funktion ist. Wenn Sie weitere GROUP BY-Beispiele sehen möchten, empfehle ich Ihnen den Artikel Examples of SQL GROUP BY. Dort finden Sie 5 weitere Beispiele, die Ihnen helfen werden, GROUP BY zu meistern.

Vertiefen Sie Ihr Wissen über SQL GROUP BY

Diese Beispiele haben Ihnen hoffentlich gezeigt, wie einfach es ist, eine SQL GROUP BY Klausel zu schreiben. Sie ist im Geschäftsalltag wirklich nützlich, da sie Ihnen hilft, mit nur wenigen Zeilen Code aussagekräftige Dateneinblicke zu erhalten.

Jetzt ist es an der Zeit, zu üben. Ich schlage vor, dass Sie mit dem Kurs SQL für Anfänger auf LearnSQL.de beginnen. Wenn Sie die Grundlagen bereits kennen und Ihre Fähigkeiten verbessern möchten, versuchen Sie unseren Kurs SQL-Übungssatz. Denken Sie daran, dass Sie nur durch Üben Ihr Wissen verbessern und sich zum SQL-Experten entwickeln können.