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 */
Datenbank
legomania
👉 https://db-sql.ch/connections/9e5bd382-6110-4f04-adf7-2b46fcdadfd5/legomania
Geben Sie den jüngsten Legodude aus, indem Sie eine verschachtelte Unterabfrage verwenden.
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 */
Für jede Spalte, die nicht in der GROUP BY
-Klausel steht, muss eine Aggregatfunktion verwendet werden!
Datenbank
legomania
👉 https://db-sql.ch/connections/9e5bd382-6110-4f04-adf7-2b46fcdadfd5/legomania
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
Aggregierte Abfragen