Databases Reference
In-Depth Information
werden die Datensätze der Tabelle
alben
gezählt. Dieser kleine Unterschied hat
zur Folge, dass wir zwei verschiedene Ergebnisse bekommen, wenn wir den
Durchschnittspreis unserer Alben in der folgenden Anweisung auf zwei verschie-
dene Weisen ermitteln:
Listing 11.8:
Die zwei Gesichter von
count
select avg(preis), sum(preis)/count(
*
)
from alben
Von der
avg
-Funktion werden
null
-Werte ignoriert. Bei der zweiten Variante
zur Durchschnittsberechnung werden die
null
-Werte nur im Zähler ignoriert. Die
Funktion
count(
*
)
zählt Datensätze, so dass
null
hier keinerlei Relevanz zu-
kommt. Diese kleinen Unterschiede mögen banal erscheinen, in der Praxis sind
sie aber eine nicht zu unterschätzende Fehlerquelle.
Tabelle 11.10:
Ergebnis der Abfrage aus Listing 11.8
avg(preis)
sum(preis) / count(*)
4.525
3.62
Wenn wir nicht nur
null
, sondern auch Dubletten bei der Aggregatbildung igno-
rieren wollen, hilft uns - wie bei einem einfachen
select
- das Schlüsselwort
distinct
weiter:
select count(distinct reihe)
from alben
H2 findet, wie erwartet, vier verschiedene Comicreihen.
Mit Funktionen und insbesondere mit Aggregatfunktionen können wir ein-
drucksvolle Ergebnisse erzielen. Aggregatfunktionen spielen auch im folgenden
Kapitel eine zentrale Rolle. In verschachtelten Abfragen (siehe Kapitel 14) können
sie allerdings zu rechenzeitfressenden Monstern mutieren.