Databases Reference
In-Depth Information
Wann war die jeweils letzte Bestellung der Kunden?
SELECT kunden_nr, MAX (bestelldatum)
FROM bestellung
GROUP BY kunden_nr;
kunden_nr MAX(bestelldatum)
=========== =================
101 2000-04-28
103 2000-05-15
105 2000-05-12
Auch auf virtuelle Spalten können Gruppierungsfunktionen angewandt werden.
Das folgende Beispiel berechnet für jeden Lagerplatz die durchschnittliche Diffe-
renz zwischen Lagerbestand und Mindestbestand aller Artikel.
SELECT lagerplatz, AVG (bestand - mindestbestand)
FROM artikel
GROUP BY lagerplatz;
lagerplatz AVG(bestand-mindestbestand)
========== =============================
2 206.50000000000
4 345.00000000000
5 124.00000000000
7 573.33333333333
Die Ergebnistabellen sind echte Relationen, die nur verschiedene Zeilen enthalten.
Es ist klar, dass die Werte des Gruppierungsattributes jeweils eindeutig in der
Ergebnistabelle sind. Somit können insbesondere keine Zeilen mehrfach auftreten.
Es ist sinnvoll, alle Gruppierungsattribute in der SELECT-Klausel anzugeben -
sonst könnte wir die übrigen Informationen ja gar nicht zuordnen.
Die Gruppierung fasst in der Regel mehrere Tupel der Ausgangsrelation zu einem
einzigen Tupel der Ergebnisrelation zusammen. Daraus ergibt sich, dass die Attri-
bute, die innerhalb einer Gruppe verschiedene Werte aufweisen, nicht mehr einzeln
angezeigt werden können. Es kann pro Gruppe und pro Attribut nur noch einen
Wert geben, der eben durch Anwendung der Aggregatfunktionen erzeugt wird.
Wenn also, um auf das letzte Beispiel zurückzukommen, die letzte Bestellung eines
Kunden gefragt ist, können nicht alle einzelnen Bestelldaten angezeigt werden. Ein
solcher Versuch wird vielmehr mit einer Fehlermeldung quittiert, wie im folgen-
den Beispiel:
-- Illegale Anweisung
SELECT kunden_nr, bestelldatum
FROM bestellung
GROUP BY kunden_nr
Die Reaktion des Datenbanksystems ist eine Meldung der Art: » Column 'bestell-
datum' cannot be used unless it is in a GROUP BY «
Search WWH ::




Custom Search