<< >> Up Title Contents Index

Gruppierung von Werten: GROUP BY

Beispiel:

SELECT ort, FIXED (AVG(konto),7,2)
       FROM kunde
       GROUP BY ort
       ORDER BY ort

Die Anfrage bestimmt den durchschnittlichen Kontobetrag für jeden Ort (AVG). Da die zweite Spalte der Ergebnistabelle keine vordefinierte Bezeichnung mehr hat, wird vom System die Standardüberschrift EXPRESSION1 gewählt. GROUP BY teilt die Tabelle in Gruppen von Zeilen mit demselben Ortsnamen ein und gibt eine Resultatszeile für jede Gruppe zurück. Zur geordneten Ausgabe der Gruppenergebnisse sollte ORDER BY verwendet werden. GROUP BY sammelt die Ergebnisse gruppenweise, aber ordnet sie nicht unbedingt.

Außer bei 'ort' muß vor jede andere Spalte eine der Funktionen geschrieben werden, deren Anwendung sich auf eine gesamte Spalte einer Zwischenergebnistabelle bezieht. (Solche Funktionen sollen hier auch als Set-Funktionen bezeichnet werden.) 'ort' kann ohne Funktion stehen, weil jedes Element der Gruppe denselben Wert für 'ort' hat.

AVG gehört ebenso wie MIN, MAX, COUNT, SUM, STDDEV und VARIANCE zu den Funktionen, die auf eine gesamte Spalte angewandt werden. Eine genauere Erklärung hierzu ist im nächsten Kapitel zu finden.

GROUP BY liefert im allgemeinen eine Gruppe für jeden unterschiedlichen Wert der zu gruppierenden Spalte.

Es kann nach mehreren Spalten gruppiert werden. Dabei werden wiederum zunächst Gruppen nach dem ersten Kriterium gebildet. Jede dieser Gruppen wird anschließend nach den weiteren Kriterien unterteilt.

Wird GROUP BY verwendet, dann muß es nach FROM und WHERE und vor ORDER BY stehen.

Zeige für jeden Ort das Minimum, den Durchschnitt und das Maximum des Kontostandes aller Kunden:

SELECT ort, MIN(konto) min_konto,
       FIXED (AVG(konto),7,2) avg_konto,
       MAX(konto) max_konto
       FROM kunde
       GROUP BY ort

Für die berechneten Ergebnisspalten wurden neue Überschriften definiert.

Zeige für jeden Ort außer Berlin das Minimum, den Durchschnitt und das Maximum des Kontostandes:

SELECT ort, MIN(konto) min_konto,
       FIXED (AVG(konto),7,2) avg_konto,
       MAX(konto) max_konto
       FROM kunde
       WHERE ort <> 'Berlin'
       GROUP BY ort

Zeige für jeden Ort die Anzahl der Kunden und ihren Gesamtkontostand:

SELECT ort, COUNT(*) anzahl,
       FIXED (AVG(konto),7,2) avg_konto,
       SUM(konto) sum_konto
       FROM kunde
       GROUP BY ort


<< >> Up Title Contents Index