Das Schlüsselwort GROUP BY wird eingesetzt, um Daten zu gruppieren. Gruppierungen werden in der
Regel zusammen mit Auswertungsfunktionen in SQL-Statements eingesetzt. Auf diese Weise können die einzelnen Datensätze im
Datenbestand gruppiert und anschließend für jede Gruppe einzeln Auswertungen duchgeführt werden. Somit kann beispielsweise
direkt aus der Datenbank erfragt werden, wie viele Kunden ein bestimmtes Produkt kauften oder wie hoch der durchschnittliche Umsatz pro
Postleitzahl ist.
Folgendes Beispiel veranschaulicht den Einsatz von GROUP BY: Gesucht wird für jeden Kontinent die
Anzahl der Länder, die zu jedem Kontinent in der Datenbank (Country) gespeichert
sind.
SQL-Statement
SELECT Continent, COUNT(*) FROM Country GROUP BY Continent;
| Ergebnis | |
|---|---|
| Continent | COUNT(*) |
| Africa | 6 |
| America | 5 |
| Asia | 8 |
| Australia/Oceania | 6 |
| Europe | 7 |
Auf der Relation Country werden so viele verschiedene Gruppen gebildet, wie es verschiedene Werte von
Continent gibt. So wird hier jeder Datensatz mit Asia als Wert
für Continent in eine Gruppe sortiert, jeder Datensatz mit Africa
in eine weitere Gruppe, usw. Für die Beispieltabelle ergeben sich durch die Gruppierung nach Kontinenten fünf
verschiedene Gruppen. Anschließend wird mit der Aggregatsfunktion COUNT(*) die Anzahl der Datensätze
in jeder Gruppe gezählt. Die Datensätze der Ergebnismenge ergeben sich aus dem Gruppierungskriterium (Continent) und dem Ergebnis
der für jede Gruppe ausgeführten Aggregatsfunktion (COUNT(*)).
Mit Aggregatsfunktionen werden mehrere Werte zu einem Wert aggregiert, d.h. verdichtet oder zusammengefasst. Mit diesen Funktionen können
in der Datenbank bereits sehr effizient Berechnungen auf den gespeicherten Datensätzen ausgeführt werden. Die folgende Tabelle
erläutert die wichtigsten Aggregatsfunktionen in SQL. Diese Funktionen können auch ohne GROUP BY
eingesetzt werden. Sie beziehen sich dann auf die gesamte Tabelle bzw. auf die durch WHERE
beschränkte Ergebnismenge.
Mit dem Schlüsselwort AS können die Spaltennamen der Ergebnistabelle gezielt umbenannt werden.
Das hilft insbesondere beim Einsatz von Aggregatsfunktionen. Beispiele dazu sind zusammen mit den Aggregatsfunktionen in der folgenden
Tabelle dargestellt.
| Wichtige Aggregatsfunktionen in SQL | ||
|---|---|---|
| Operator | Beschreibung | Beispiel |
COUNT(*) |
Zählt die Anzahl der Datensätz einer Gruppe, im Beispiel ein Einsatz zusammen mit GROUP BY undein Einsatz ohne GROUP BY. |
SELECT Continent, Count(*) AS AnzahlDerLaenderProKontinent |
SUM(spalte) |
Summiert die Werte einer Spalte innerhalb einer Gruppe, im Beispiel die Fläche aller Länder eines Kontinents. |
SELECT Continent, SUM(Area) AS FlaecheDesKontinents |
AVG(spalte) |
Berechnet den Durchschnittswert einer Spalte innerhalb einer Gruppe. |
SELECT Continent, AVG(Area) |
MAX(spalte) |
Berechnet den Maximalwert einer Spalte innerhalb einer Gruppe; kann für Zahlen, Zeichenketten und Datumswerte eingesetzt werden.. |
SELECT Continent, MAX(Area) |
MIN(spalte) |
Berechnet den Minimalwert einer Spalte innerhalb einer Gruppe; kann für Zahlen, Zeichenketten und Datumswerte eingesetzt werden.. |
SELECT Continent, MIN(Area) |
Mit dem Schlüsselwort HAVING besteht die Möglichkeit die Ausgabe der gruppierten Ergebnisse
einzuschränken. Während sich WHERE also auf die Auswahl der Datensätze vor dem Gruppieren
bezieht, schränkt HAVING bereits zusammengestellte Gruppierungen ein. Sollen beispielsweise in
einem Onlineshop alle Artikel ermittelt werden, die mehr als 500 Mal verkauft wurden, werden die Datensätze einer Umsatzdatenbank
erst nach Artikelnummer gruppiert, dann die Anzahl pro Gruppe ermittelt und schließlich nur die Gruppen ausgegeben, deren Anzahl größer
als 500 ist. Folgendes Beispiel veranschaulicht den Einsatz von HAVING anhand der
Country-Relation:
Gesucht ist eine Liste der Kontinente, die mindestens 5 Länder haben, welche vollständig auf einem Kontinent liegen.
SQL-StatementSELECT Continent FROM Country
WHERE Percentage = 100
GROUP BY Continent
HAVING COUNT(*) >= 5;
| Ergebnis | |
|---|---|
| Continent | |
| Africa | |
| America | |
| Australia/Oceania | |
| Europe | |
In der Relation Country werden zunächst alle Länder berücksichtigt, deren Attributwert von Percentage gleich 100 ist. Diese
Datensätze werden nach den Attributwerten im Feld Continent gruppiert. Das HAVING bezieht sich nun
auf die erfolgte Gruppierung: Es werden nur die Gruppierungen ausgegeben, die mehr als 5 Datensätze beinhalten. Die Ergebnistabelle
enthält nur die Spalte Continent.