Databases Reference
In-Depth Information
SELECT
COUNT(artikel_nr)AS ANZAHL,
SUM(listenpreis) AS PREISSUMME,
AVG(listenpreis) AS DURCHSCHN,
MIN(listenpreis) AS KLEINSTER,
MAX(listenpreis) AS GROESSTER
FROM artikel;
ANZAHL PREISSUMME DURCHSCHN KLEINSTER GROESSTER
=========== =========== ========== ========== ==========
12 428.33 35.69 .98 112.80
Einschränkungen der Projektion bei Anwendung von
Aggregatfunktionen
Die Aggregatfunktionen in den bisher vorgestellten Beispielen fassen eine ganze
Ta b e l l e
in einer Reihe
zusammen. Aus diesem Grund ist es nicht möglich, zusätzlich
noch einzelne Attributwerte auszugeben, denn dann müsste die Ergebnistabelle
mindestens so viele Zeilen enthalten, wie es verschiedene Werte in der gewünsch-
ten Spalte gibt. Das heißt: Wenn in der SELECT-Klausel mindestens eine Aggregat-
funktion auftritt, dann dürfen keine elementaren Spalten mehr auftreten.
17
Aufgabe 5.23
Warum liefert im obigen Fall die Funktion
COUNT(artikel_nr)
mit Sicherheit das-
selbe Ergebnis wie
COUNT(*)
? Was würde bei Anwendung von
COUNT(DISTINCT
artikel_nr)
herauskommen?
Nullmarken bei Aggregatfunktionen
Nullmarken erfahren bei Anwendung der Aggregatfunktionen keine Berücksichti-
gung. Dieses führt bei der Summenbildung zu demselben Resultat, als wenn
NULL
die Zahl 0 repräsentierte. Bei der Minimum- und Maximumbildung und bei der
Durchschnittsbildung fallen Nullmarken ganz heraus. Bei leeren Ergebnismengen
sind
MIN
,
AVG
,
MAX
nicht definiert. Die COUNT-Funktion, auf eine Spalte ange-
wandt, zählt die tatsächlich vorhandenen Werte. Bei Spalten, für die Nullmarken
zulässig sind, kann deshalb das Ergebnis
COUNT(spalte)
kleiner sein als
COUNT(*)
.
Dieses Verfahren scheint deswegen berechtigt, weil wir einen Wert, der gar nicht
da ist, auch nicht in einen Durchschnitt einbeziehen können. Aber wie sieht es aus,
wenn der Wert zwar existiert, aber zurzeit nicht bekannt ist, also durch eine A-
Marke repräsentiert ist? Dann wird der über
AVG(spalte)
berechnete Durchschnitt
falsch, und der über die Formel
SUM(spalte)/COUNT(spalte)
berechnete ebenfalls.
Richtig wäre dann die Antwort
NULL
, was hieße: »
Ich kann den Durchschnitt nicht
17 Außer Spalten aus der GROUP BY-Klausel, wenn diese verwendet wird. vgl. 5.2.9.