SQL-Abfragen mit Aggregatfunktionen

Die ersten Abfragen auf der Basis von SQL machen deutlich, dass die Bestandteile des Codes oftmals die gleichen sind. So kommen in den meisten Abfragen die Anweisungen SELECT, FROM sowie WHERE vor.

Weiterhin besteht die Möglichkeit, mit Hilfe einer Abfrage z.B. die Anzahl bestimmter Datensätze bestimmen zu lassen. Hierfür wird die Aggregatfunktion COUNT verwendet.

Um z.B. die Anzahl der Schülerdatensätze zählen und anzeigen zu lassen, ist folgender Code erforderlich:

SELECT count (*)
FROM tbl_schüler;

Anmerkung: Die Klammer mit dem “*” ist erforderlich, um der Syntax, nach der auf eine Aggregatfunkion ein Klammerausdruck folgen muss, gerecht zu werden.

Das Abfrageergebnis hat jedoch einen Schönheitsfehler:

MS Access benennt die Spalte automatisch, wenn wir in den Code hierfür keine Anweisung gegeben haben (hier mit „Expr1000“).

Das wollen wir nun ändern, indem wir der Spalte ein Alias geben:

SELECT count (*) as Schüleranzahl
FROM tbl_schüler;

Jetzt übernimmt das Programm das Alias als Spaltenüberschrift gemäß unserer Vorgabe „Schüleranzahl“:

Eine andere Aggregatfunktion, welche häufig Anwendung findet, ist die Suche nach Extremwerten mit Hilfe der Anweisungen „MIN“ und „MAX“.

Wir wollen das früheste Geburtsdatum aus der Tabelle tbl_schüler heraus finden. Hierzu formulieren wir folgenden SQL-Code:

SELECT Min (tbl_schüler.Geburtsdatum) as Geburtsdatum
FROM tbl_schüler;

Anmerkung 1: Lässt man die Angabe der Tabelle in der Klammer weg, was aufgrund der FROM-Anweisung und der damit verbundenen Eindeutigkeit möglich ist, muss die Benennung in „“ gesetzt werden, da MS Access sonst einen Zirkelbezug innerhalb der SELECT-Anweisung feststellt.

Unser Ergebnis sieht folgendermaßen aus:

Anmerkung 2: Wenn wir uns die Geburtsdaten in der Tabelle tbl_schüler ansehen, so stellen wir fest, dass das angezeigte Datum keineswegs das früheste ist. Die Problematik besteht darin, dass – wie wir in der Entwurfsansicht der Tabelle feststellen können – das Feld „Geburtsdatum“ als kurzer Text formatiert ist. Folglich vergleicht MS Access lediglich die ersten Angaben vor dem Punkt sämtlicher Einträge. Um das zu ändern, ist es erforderlich, für das Geburtsdatum den Felddatentyp Datum/Uhrzeit auszuwählen.

Das korrekte Ergebnis sieht folgendermaßen aus (das Kalendersymbol weist darauf hin, dass ein Attribut, welches als Datum formatiert wurde, Bestandteil der Abfrage ist):

Eine Aggregatfunkion als Bestandteil einer Selektion

Eine Aggregatfunktion kann auch Bestandteil der WHERE-Anweisung innerhalb einer Selektion sein.
Wir wollen uns den jüngsten Schüler mit dessen Name, Vorname und Geburtsdatum anzeigen lassen:

SELECT tbl_schüler.name, tbl_schüler.vorname, tbl_schüler.Geburtsdatum
FROM tbl_schüler
WHERE Geburtsdatum = (Select Max (Geburtsdatum) from tbl_schüler);

Im Aufgabenteil zu diesem Kapitel stehen Ihnen viele Möglichkeiten zur Verfügung, Ihre neu erworbenen Kenntnisse und Kompetenzen anzuwenden.