Databases Reference
In-Depth Information
Das RDBMS weist die Anweisung jedoch als fehlerhaft zurück: Wir haben hier
übersehen, dass die where -Komponente nur Prädikate für Spalten enthalten darf.
Skalare Funktionen sind ebenfalls möglich, Aggregatfunktionen aber nicht. Im-
mer wenn wir Prädikate formulieren, die Aggregatfunktionen enthalten, benöti-
gen wir dazu eine having -Komponente. Was where für Spalten ist, ist having
für aggregierte Spalten. Richtig ist also:
Listing 12.7: Aggregrate gehören nicht in die where -Komponente
select reihe, count(band)
from alben
group by reihe
having count(band)>=3
Das Ergebnis aus Tabelle 12.5 entspricht unseren Erwartungen:
Tabelle 12.5: Ergebnis der Abfrage aus Listing 12.7
reihe
count(band)
Asterix
5
Hinweis
Prädikate, die Aggregatfunktionen enthalten, gehören zur having -
Komponente und nicht zur where -Komponente einer Abfrage.
Selbstverständlich können auch die Spalten, nach denen wir gruppieren, ohne
Aggregate in der having -Komponente stehen, doch haben sie dann die gleiche
Funktion wie in der where -Komponente.
Listing 12.8: Eine having -Komponente ohne Aggregatfunktion
select reihe, count(band)
from alben
group by reihe
having reihe not like '% %'
Die Anweisung ermittelt alle Reihen, die aus nur einem Wort bestehen, zusammen
mit der Anzahl der jeweils vorhandenen Bände:
reihe
count(band)
Asterix
5
Franka
2
 
Search WWH ::




Custom Search