Fachkonzept - Aggregation
Gruppieren von Ergebnissen
Das Zusammenfassen von Datensätzen ist eine zentrale Funktionalität von SQL.
Das Datenbanksystem kann die Ergebnisse eines SQL-Befehls gruppieren und auf jede Gruppe dann eine Aggregationsfunktion anwenden.
Folgendes Beispiel führt die Anfrage aus dem Einstieg weiter:
Den Ablauf der Auswertung kann man sich so vorstellen:
![Gruppieren](https://inf-schule.de/content/3_datenbanksysteme/1_terra/5_aggregation/2_konzept_aggregation/gruppieren0.gif)
- Unsortierte Ausgangsliste.
- Die Ergebnisse werden zunächst nach den Gruppierungsattributen (hier nur kontinent.Name) sortiert.
- Im nächsten Schritt werden Gruppen gebildet, die jeweils den gleichen Wert in diesen Attributen haben.
- Die Anzahl der Zeilen pro Gruppe werden gezählt.
- Das Gruppierungsattribut wird mit der jeweiligen Anzahl ausgegeben.
Klicke auf die einzelnen Schritte zur Veranschaulichung.
Die Attribute, nach denen gruppiert werden soll, müssen nicht unbedingt angezeigt werden. Im Beispiel oben wäre also auch folgende Gruppierung richtig:
GROUP BY kontinent.KNR
Aggregationsfunktionen
Neben dem reinen Zählen der Zeilen einer Gruppe können weitere Aggregationsfunktionen verwendet werden:
Funktion | Bedeutung |
---|---|
MIN(Attribut) | Minimaler Wert, der für dieses Attribut in der Gruppe angenommen wird. |
MAX(Attribut) | Maximaler Wert, der für dieses Attribut in der Gruppe angenommen wird. |
AVG(Attribut) | Durchschnitt (arithmetisches Mittel) aller Werte des Attributs in der Gruppe. |
SUM(Attribut) | Summe aller Werte des Attributs in der Gruppe. |
Als Beispiel kannst du einmal folgenden SQL-Befehl ausführen:
SELECT land.Name, AVG(ort.Einwohner), MIN(ort.Einwohner), MAX(ort.Einwohner)
FROM land, ort
WHERE land.LNR = ort.LNR
AND land.Name = 'Deutschland'
Einschränken der Gruppen
Manchmal sollen nicht alle Gruppen ausgegeben werden. Als Beispiel sollen nur die Kontinente angezeigt werden, für die mehr als 30 Länder erfasst sind:
Der HAVING
-Teil der SQL-Anfrage wählt ähnlich wie der WHERE-Teil die Datensätze
aus, die angezeigt werden sollen. Allerdings greift er erst nach dem Zusammenfassen der Gruppen und
stellt Bedingungen für die berechneten Attributen.
Weiteres Beispiel: Ausgabe der Kenndaten aller Länder, in denen Megastädte (> 10 Mio. Einwohner) liegen:
SELECT land.Name, AVG(ort.Einwohner) AS Durchschnitt, MAX(ort.Einwohner) AS Maximum
FROM land, ort
WHERE land.LNR = ort.LNR
GROUP BY land.Name
HAVING Maximum>10000000
ORDER BY Maximum DESC
Beachte, dass im HAVING
-Teil auch der Alias-Namen des berechneten Attributs verwendet werden kann.