Zurück zur Artikelliste Artikel
6 Leseminuten

GROUP BY in SQL erklärt

Die SQL-Anweisung GROUP BY ist einfach zu verwenden, aber manchmal schwer zu beherrschen. Erfahren Sie, was Sie mit GROUP BY tun können, wie es funktioniert und wie Sie es mit Aggregatfunktionen verwenden können.

GROUP BY ist eines der grundlegenden SQL-Werkzeuge. Für Anfänger kann es jedoch schwierig sein, zu verstehen, wie GROUP BY funktioniert und wie es zur Berechnung von Statistiken mit verschiedenen Aggregatfunktionen verwendet wird. In diesem Artikel werde ich anhand mehrerer Beispiele genau zeigen, wie GROUP BY Zeilen organisiert und wie Aggregatfunktionen verwendet werden können, um Statistiken für eine oder mehrere Spalten zu berechnen.

Also, fangen wir an.

Wie funktioniert SQL GROUP BY?

GROUP BY ist ein unverzichtbares Werkzeug für jeden Datenanalysten, der mit SQL arbeitet. Wenn Sie Ihre Daten in Gruppen organisieren und eine Art von Aggregatstatistik für diese Gruppen berechnen möchten, benötigen Sie die GROUP BY Klausel.

Was macht also GROUP BY? Im Grunde gruppiert sie Zeilen mit demselben Wert in einer Gruppe oder einem Bucket. Schauen wir uns an, wie das funktioniert.

Angenommen, wir betreiben eine Buchhandlung und möchten wissen, wie viele Bücher verschiedener Genres wir auf Lager haben. Unsere Datenbank enthält eine Tabelle, in der die Buchtitel, die Genres und die Bestandsmenge aufgeführt sind.

Die folgende Visualisierung zeigt, wie die GROUP BY Klausel Gruppen aus Tabellendaten erstellt. Wir möchten die Gesamtmenge der Bücher für jedes Genre wissen; daher gruppiert GROUP BY die Bücher desselben Genres und summiert die entsprechenden Mengen. Auf diese Weise wird eine Ergebnistabelle erstellt, in der die Genres und die Gesamtmenge der Bücher in unserem Bestand aufgeführt sind.

GROUP BY Summe

Eine ausführlichere Einführung in das Thema GROUP BY finden Sie in diesem Video-Tutorial aus unserer Reihe "Wir lernen SQL".

GROUP BY in Aktion

Jetzt ist es an der Zeit für konkretere Beispiele von SQL-Abfragen mit einer GROUP BY -Klausel. Wir verwenden die Tabelle books die die ID, den Titel, den Autor, das Genre, die Sprache, den Preis und die Menge jedes Romans speichert, den wir auf Lager haben.

idtitleauthorgenrelangpriceqty
1Les Trois MousquetairesAlexandre Dumasadventurefr11.904
2A Game of ThronesGeorge R.R. Martinfantasyen8.495
3Pride and PrejudiceJane Austenromanceen9.992
4Vampire AcademyRichelle Meadfantasyen7.993
5IvanhoeWalter Scottadventureen9.993
6ArmanceStendhalromancefr5.881

Um die Gesamtzahl der Bücher eines jeden Genres zu berechnen, verwenden wir die folgende Abfrage:

SELECT genre, SUM(qty) AS total
FROM books
GROUP BY genre;

In der GROUP BY Klausel wählen wir unsere Zeilen aus, die nach der Spalte Genre gruppiert werden sollen. Dann summiert die Funktion SUM(qty) in der Anweisung SELECT die Mengenwerte innerhalb jeder Gruppe (d. h. jedes Buchgenres), wobei das Ergebnis im entsprechenden Feld total angezeigt wird:

genretotal
adventure7
fantasy8
romance3

Verwendung von Aggregatfunktionen mit GROUP BY

GROUP BY fasst Zeilen mit demselben Wert in einem Bereich zusammen. In der Regel möchte man für diese Gruppe von Zeilen eine Statistik berechnen, z. B. den Durchschnittswert oder die Gesamtmenge. Zu diesem Zweck bietet SQL Aggregatfunktionen, die Werte aus einer bestimmten Spalte zu einem Wert für die jeweilige Gruppe zusammenfassen.

Bisher haben wir nur SUM() als Aggregatfunktion für die Gruppierung der vorrätigen Buchtitel verwendet. Dies ist jedoch nicht die einzige Aggregatfunktion, die Sie mit GROUP BY verwenden können. SQL bietet auch:

  • COUNT() die Anzahl der Zeilen in jeder Gruppe zu berechnen.
  • AVG() den Durchschnittswert für jede Gruppe zu ermitteln.
  • MIN() den Mindestwert in jeder Gruppe zu ermitteln.
  • MAX() den Maximalwert in jeder Gruppe zu ermitteln.

Schauen wir uns an, wie die Funktion AVG() mit GROUP BY funktioniert. Dieses Mal wollen wir den Durchschnittspreis für Bücher in jedem Genre berechnen. Wir beginnen damit, die gewünschte Ausgabe zu visualisieren.

GROUP BY Durchschnitt

Wir gruppieren unsere Bücher wieder nach Genre, aber dieses Mal wollen wir den durchschnittlichen Buchpreis in jedem Genre berechnen. Die SQL-Abfrage dafür sieht wie folgt aus:

SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;

Diese Abfrage erstellt eine Tabelle mit zwei Spalten (Genre und avg_price), in der der Durchschnittspreis durch Mittelung der Preiswerte für die Bücher jedes Genres berechnet wird:

genreavg_price
adventure10.945
fantasy8.24
romance7.935

Tatsächlich sind wir nicht darauf beschränkt, nur eine Aggregatfunktion mit einer GROUP BY Klausel zu verwenden. Fügen wir also die Informationen über den Mindest- und Höchstpreis der Bücher in jedem Genre hinzu:

SELECT genre, 
MIN(price) AS min_price, 
     AVG(price) AS avg_price, 
MAX(price) AS max_price
FROM books
GROUP BY genre;

Die Ergebnismenge enthält nun vier Spalten: genre, min_price, avg_price, und max_price.

genremin_priceavg_pricemax_price
adventure9.9910.94511.90
fantasy7.998.248.49
romance5.887.9359.99

Beachten Sie, dass bei der Verwendung von GROUP BY die Anweisung SELECT nur Felder enthalten darf, die entweder in der Aggregatfunktion verwendet werden oder in der Klausel GROUP BY aufgeführt sind. In unserem Fall können wir zum Beispiel nicht title oder author zu unserer Ergebnismenge hinzufügen. Dies macht keinen Sinn, da jede Zeile in unserer Ausgabetabelle Informationen über mehrere Bücher mit unterschiedlichen Titeln und Autoren enthält.

Wenn Sie mehr über andere Probleme erfahren möchten, die bei der Verwendung von GROUP BY in SQL auftreten können, lesen Sie diesen Artikel, in dem häufige GROUP BY-Fehler und deren Vermeidung beschrieben werden.

GRUPPE NACH ZWEI SPALTEN

In SQL können Sie Ihre Daten auch anhand mehrerer Spalten gruppieren. Nehmen wir zum Beispiel an, wir möchten unsere Bücher nicht nur nach Genre, sondern auch nach Sprache gruppieren. Und wir wollen die Anzahl der Buchtitel in jeder Kategorie berechnen.

Tipp: Die Aggregatfunktion COUNT() hilft uns bei der Berechnung der Anzahl der Buchtitel (d. h. der Zeilen).

Um die Anzahl der Buchtitel nach Genre und Sprache zu berechnen, verwenden wir die folgende Abfrage:

SELECT genre, lang, count(title) AS titles
FROM books
GROUP BY genre, lang;

Wir erhalten eine Ausgabetabelle mit drei Spalten: genre, Sprache (lang) und die Anzahl der titles in dieser Kategorie:

genrelangtitles
adventureen1
adventurefr1
fantasyen2
romanceen1
romancefr1

In unserem Beispieldatensatz haben wir also:

  • Ein englischsprachigerBuchtitel aus dem Genre Abenteuer(Ivanhoe).
  • Ein französischsprachiger Buchtitel im Abenteuergenre(Les Trois Mousquetaires).
  • Zwei englischsprachige Buchtitel aus dem Fantasy-Genre(A Game of Thrones und Vampire Academy).
  • Ein englischsprachiger Buchtitel aus dem Genre Liebesroman(Stolz und Vorurteil).
  • Ein französischsprachiger Buchtitel aus dem Bereich Liebesromane(Armance).

Wie Sie sehen, gibt es in unserem Datensatz keine französischsprachigen Fantasy-Bücher.

Weitere Beispiele für GROUP BY Anwendungen finden Sie in diesem Artikel, der zeigt, wie GROUP BY in realistischen Geschäftsszenarien eingesetzt werden kann.

Sind Sie bereit, GROUP BY in SQL zu verwenden?

Sie haben nun ein besseres Verständnis dafür, wie GROUP BY Sie bei der Organisation und Analyse Ihrer Daten unterstützen kann. Wenn Sie jedoch mit GROUP BY wie ein Profi umgehen wollen, brauchen Sie viel Übung.

LearnSQL.de bietet einen SQL für Anfänger Kurs an, der 129 interaktive Übungen zu Aggregation, Gruppierung, JOINs, Unterabfragen und mehr enthält. Dieser Kurs ist eine perfekte Gelegenheit, um zu lernen, wie man Zeilen gruppiert und Statistiken mit Aggregatfunktionen berechnet.

Viel Spaß beim Lernen!