Daten aggregieren

Geschätzte Lektüre: 4 Minuten 104 Ansichten

Von Zeilen zu Kennzahlen

Bisher haben wir Abfragen durchgeführt, die einzelne Zeilen zurückgeben. Oft benötigen Sie jedoch verdichtete Informationen – also Kennzahlen über eine Gruppe von Zeilen. Hier kommen Aggregatsfunktionen ins Spiel.

Die wichtigsten Aggregatsfunktionen sind:

  • COUNT(*) – Zählt die Anzahl der Zeilen
  • COUNT(spaltenname) – Zählt die Anzahl der Nicht-NULL-Werte in einer Spalte
  • SUM(spaltenname) – Berechnet die Summe der Werte
  • AVG(spaltenname) – Berechnet den Durchschnitt
  • MIN(spaltenname) – Findet den kleinsten Wert
  • MAX(spaltenname) – Findet den größten Wert

Beispiele ohne Gruppierung:

-- Wie viele Bücher sind insgesamt im Bestand?
SELECT COUNT(*) AS anzahl_buecher
FROM buecher;
-- Wie hoch ist der Gesamtwert aller Bücher (Preis * Bestand)?
SELECT SUM(preis * bestand) AS gesamtwert_lager
FROM buecher;
-- Was ist der Durchschnittspreis aller Bücher?
SELECT AVG(preis) AS durchschnittspreis
FROM buecher;
-- Was sind das älteste und das neueste Buch?
SELECT MIN(jahr) as aeltestes_jahr, MAX(jahr) as neuestes_jahr
FROM buecher;

Gruppieren mit GROUP BY

Die wirkliche Stärke von Aggregatsfunktionen entfaltet sich in Kombination mit GROUP BY. Mit GROUP BY teilen Sie die Zeilen einer Tabelle in Gruppen ein – basierend auf den Werten einer oder mehrerer Spalten. Die Aggregatsfunktionen werden dann pro Gruppe berechnet.

Beispiel: Wie viele Bücher haben wir pro Autor?

SELECT autor, COUNT(*) AS anzahl_buecher
FROM buecher
GROUP BY autor;

Die Datenbank bildet für jeden eindeutigen Autor eine Gruppe und zählt dann die Zeilen innerhalb dieser Gruppe.

Beispiel: Was ist der Durchschnittspreis der Bücher pro Autor?

SELECT autor, AVG(preis) AS durchschnittspreis
FROM buecher
GROUP BY autor;

Wichtig: Im SELECT-Teil einer Abfrage mit GROUP BY dürfen nur Spalten stehen, die entweder in der GROUP BY-Klausel aufgeführt werden oder in Aggregatsfunktionen eingebettet sind. Andere Spalten würden zu einem mehrdeutigen Ergebnis führen, da sie innerhalb einer Gruppe unterschiedliche Werte haben können.


Gruppen filtern mit HAVING

Sie kennen bereits die WHERE-Klausel zum Filtern einzelner Zeilen. Was aber, wenn Sie Gruppen filtern möchten – also nur solche Gruppen anzeigen wollen, die eine bestimmte Bedingung erfüllen? Hierfür dient HAVING.

HAVING wird nach GROUP BY angewendet und filtert auf Basis der Ergebnisse der Aggregatsfunktionen.

Beispiel: Zeige nur Autoren, von denen mehr als ein Buch im Bestand ist.

SELECT autor, COUNT(*) AS anzahl_buecher
FROM buecher
GROUP BY autor
HAVING COUNT(*) > 1;

Beispiel: Zeige nur Autoren, deren durchschnittlicher Buchpreis über 15 Euro liegt.

SELECT autor, AVG(preis) AS durchschnittspreis
FROM buecher
GROUP BY autor
HAVING AVG(preis) > 15.00;

Die logische Reihenfolge der Verarbeitung ist dabei:

  1. FROM – Welche Tabelle(n)?
  2. WHERE – Welche einzelnen Zeilen?
  3. GROUP BY – Wie werden die Zeilen gruppiert?
  4. HAVING – Welche Gruppen werden angezeigt?
  5. SELECT – Welche Spalten werden ausgegeben?
  6. ORDER BY – Wie wird das Ergebnis sortiert?

Dieses Dokument teilen

Daten aggregieren

Oder Link kopieren

INHALT

Abonnieren

×
Cancel