Zum Hauptinhalt springen
26e

Aggregierte Abfragen

Oft sollen ergebnisse in einer zusammengefassten Form ausgegeben werden. So interessiert einem bspw. oft, wie viele Datensätze in einer Tabelle vorhanden sind, oder wie hoch der Durchschnittswert einer Spalte ist. Hierfür gibt es die sogenannten Aggregatfunktionen.

COUNT(*)

Zählt die Anzahl der Datensätze in einer Tabelle.

SELECT COUNT(*) FROM legodudes;
/* count
-------
7 */

SUM()

Addiert die Werte einer Spalte.

SELECT SUM(lieblingszahl) FROM legodudes;
/* sum
-----
651 */

AVG()

Berechnet den Mittelwert der Werte einer Spalte.

SELECT AVG(lieblingszahl) FROM legodudes;
/* avg
------
93.0 */

MAX()

Gibt den maximalen Wert einer Spalte zurück.

SELECT MAX(lieblingszahl) FROM legodudes;
/* max
------
420 */

MIN()

Gibt den minimalen Wert einer Spalte zurück.

SELECT MIN(lieblingszahl) FROM legodudes;
/* min
-----
1 */

Damit lassen sich nun auch bspw. alle Legodudes ausgeben, die die höchste Lieblingszahl haben, wobei die MAX()-Funktion in einer verschachtelten Unterabfrage verwendet wird.

SELECT * FROM legodudes 
WHERE lieblingszahl = (SELECT MAX(lieblingszahl) FROM legodudes);

STRING_AGG(column, delimiter [ORDER BY column [ASC|DESC]])

Mit STRING_AGG lassen sich Texte aus mehreren Zeilen zu einem Text zusammenfügen. Der delimiter ist das Trennzeichen, das zwischen den einzelnen Texten eingefügt wird.

SELECT string_agg(name, ', ') FROM legodudes;
/* string_agg
--------------------------------------------------------------------------------------------------
Litty Feuerwehr, Crazy Lego Dude, Elon Marsk, Larry der Stürmer, A$AP Geerky, Wigwam Tipi, Botot */

oder mit Reihenfolge

SELECT string_agg(name, ', ' ORDER BY name) FROM legodudes;
/* string_agg
--------------------------------------------------------------------------------------------------
A$AP Geerky, Botot, Crazy Lego Dude, Elon Marsk, Larry der Stürmer, Litty Feuerwehr, Wigwam Tipi */
1. Ältester Legodude

Geben Sie den jüngsten Legodude aus, indem Sie eine verschachtelte Unterabfrage verwenden.

SSR

Group By

Oft interessiert aber nicht nur die Anzahl der Datensätze, sondern die Anzahl der Datensätze pro Kategorie. Hierfür gibt es den GROUP BY-Befehl.

GROUP BY

Mit GROUP BY lassen sich Datensätze nach einer oder mehrerer Spalten gruppieren. Die Aggregatfunktionen werden dann auf die einzelnen Gruppen angewendet.

SELECT land, COUNT(*) 
FROM legodudes
GROUP BY land;
/* land | count
------------+-------
Irland | 1
Österreich | 1
Schweden | 1
USA | 3
Schweiz | 1 */
Wichtig

Für jede Spalte, die nicht in der GROUP BY-Klausel steht, muss eine Aggregatfunktion verwendet werden!

2. Namen nach Ländern gruppiert

Erstellen Sie die folgende Tabelle (beachten Sie die Reihenfolge der Länder):

  Land      |              Namen                   
------------+--------------------------------------
Irland | Larry der Stürmer
Österreich | Crazy Lego Dude
Schweden | Litty Feuerwehr
Schweiz | Botot
USA | Elon Marsk, A$AP Geerky, Wigwam Tipi
SSR