Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

8.3.6 Aggregatfunktionen

8.3.7 Gruppieren von Daten

Daten lassen sich mit SQL innerhalb einer einzigen Abfrage gruppieren. Dadurch erhalten Sie die Möglichkeit, Aggregatfunktionen auf gruppierte Datensätze mit bestimmten Eigenschaften auszuführen. Bei der Erstellung von Abfragen mit Gruppierungen sind zwei Regeln zu beachten:

  • Gruppierungen können entweder Tabellenfelder, berechnete Felder oder Konstanten enthalten.
  • Jedes Feld, das der SELECT-Bereich der Abfrage enthält, muss entweder mit einer Aggregatfunktion versehen oder ein Element des GROUP BY-Abschnitts sein.
  • Das fällt auch beim Erstellen von Gruppierungen mit der Abfrage-Entwurfsansicht auf: Dort wird für jedes hinzugefügte Feld standardmäßig die Funktion Gruppierung festgelegt. Es ist nicht möglich, in der Spalte Funktion weder eine Gruppierung noch eine Aggregatfunktion auszuwählen.

    Einfache Gruppierungen

    Das folgende Beispiel zeigt eine Abfrage, die Produkte nach Kategorien gruppiert und die Anzahl der Produkte je Kategorie ausgibt:

    SELECT KategorieID, Count(ProduktID) AS AnzahlProdukte
    FROM tblProdukte
    GROUP BY KategorieID;

    Das Ergebnis der Abfrage sieht wie in Abbildung 8.8 aus.

    Abbildung 8.8: Abfrageergebnis einer Gruppierung von Datensätzen mit der Anzahl Datensätze jeder Gruppe

    Sie können auch nach mehreren Feldern gruppieren. Ist die Abfrage aus dem vorherigen Beispiel nicht aussagekräftig genug, können Sie auch noch den Hersteller in die Gruppierung einbeziehen:

    SELECT KategorieID, HerstellerID, Count(ProduktID) AS AnzahlProdukte
    FROM tblProdukte
    GROUP BY KategorieID, HerstellerID;

    Diese Variante gruppiert nach allen vorhandenen Kombinationen aus Kategorie und Hersteller, wie das Ergebnis in Abbildung 8.9 zeigt.

    Abbildung 8.9: Gruppierung nach einer Kombination aus mehreren Feldern

    Gruppierungen einschränken

    Es gibt zwei verschiedene Möglichkeiten, das Ergebnis einer gruppierten Abfrage einzuschränken:

  • vor dem Gruppieren der enthaltenen Datensätze und
  • nach dem Gruppieren der enthaltenen Datensätze.
  • Die erste Möglichkeit kennen Sie bereits: Mit der WHERE-Klausel leiten Sie einen Bereich ein, der Kriterien für die anzuzeigenden Datensätze enthält. Den WHERE-Abschnitt fügen Sie dabei hinter dem FROM-Bereich, aber vor dem GROUP BY-, HAVING- oder ORDER BY-Bereich ein.

    Das folgende Beispiel ermittelt die Anzahl der Produkte teurer als EUR 50,- je Kategorie. Dabei werden durch die WHERE-Bedingung zunächst alle Produkte ermittelt, die mehr als EUR 50,- kosten, und anschließend wird die Gruppierung durchgeführt:

    SELECT KategorieID, HerstellerID, Count(ProduktID) AS AnzahlProdukte
    FROM tblProdukte
    WHERE Preis > 50
    GROUP BY KategorieID, HerstellerID;

    Die zweite Möglichkeit zum Einschränken einer gruppierten Abfrage führt zunächst die Gruppierung durch und wertet dann das Ergebnis einer Aggregatfunktion als Kriterium aus. Dazu wird - analog zur WHERE-Klausel - die HAVING-Klausel zum Bereitstellen des Kriteriums beziehungsweise der Kriterien verwendet. Im folgenden Beispiel sollen die Produkte nach Kategorie und Hersteller gruppiert und die Anzahl der Produkte je Gruppierung ermittelt werden, bevor die Abfrage diejenigen Kombinationen herausfiltert, die mit weniger als zwei Produkten vertreten sind. Abbildung 8.10 zeigt das Ergebnis des folgenden SQL-Ausdrucks an:

    SELECT KategorieID, HerstellerID, Count(ProduktID) AS AnzahlProdukte
    FROM tblProdukte
    GROUP BY KategorieID, HerstellerID
    HAVING Count(ProduktID) > 1;

    Abbildung 8.10: Abfrageergebnis eines SQL-Ausdrucks mit HAVING-Klausel

    Nächster Abschnitt:

    8.3.8 WHERE, GROUP BY, HAVING und ORDER BY im Überblick

    © 2006-2008 André Minhorst Alle Rechte vorbehalten.