SQL Academy
Premium

Aggregatfunktionen

Im Artikel über Gruppierungen haben wir erwähnt, dass wir bei GROUP BY Aggregatfunktionen verwenden können. Sprechen wir jetzt ausführlicher darüber 🐳.

Allgemeine Struktur einer Query mit Aggregatfunktion

MySQL 8.4
SELECT { literal | aggregatfunktion | gruppierungsfeld } [, ...]
FROM tabellen_name
GROUP BY gruppierungsfeld [, ...];
  • [ ]optionaler Teil
  • { a | b }eine der Optionen
  • ...kann wiederholt werden
literal

Ein fester Wert wie 'text' oder 1. Er ist für alle Gruppen gleich.

aggregatfunktion

Eine Funktion, die aus allen Zeilen einer Gruppe einen Wert berechnet, zum Beispiel AVG(price).

gruppierungsfeld

Die Spalte, nach der die Zeilen in Gruppen aufgeteilt werden: Zeilen mit gleichem Wert landen in einer Gruppe. Du kannst mehrere Spalten durch Kommas getrennt angeben.

tabellen_name
Die Tabelle, deren Zeilen gruppiert werden.

So sieht zum Beispiel eine Query mit der Aggregatfunktion AVG aus:

MySQL 8.4
SELECT home_type, AVG(price) as avg_price FROM Rooms
GROUP BY home_type
home_typeavg_price
Private room89.4286
Entire home/apt148.6667
Shared room40

Beschreibung der Aggregatfunktionen

FunktionBeschreibung
SUM(tabellen_feld)Gibt die Summe der Werte zurück
AVG(tabellen_feld)Gibt den Durchschnittswert zurück
COUNT(tabellen_feld)Gibt die Anzahl der Datensätze zurück
MIN(tabellen_feld)Gibt den minimalen Wert zurück
MAX(tabellen_feld)Gibt den maximalen Wert zurück

Beispiele

  • Ermitteln wir die Anzahl jedes Unterkunftstyps und sortieren die Liste absteigend:

    MySQL 8.4
    SELECT home_type, COUNT(*) as amount FROM Rooms
    GROUP BY home_type
    ORDER BY amount DESC
    
    home_typeamount
    Private room28
    Entire home/apt21
    Shared room1
  • Suchen wir für jede Unterkunft das späteste Abreisedatum (Feld end_date):

    MySQL 8.4
    SELECT room_id, MAX(end_date) AS last_end_date FROM Reservations
    GROUP BY room_id
    
    room_idlast_end_date
    12019-02-04T12:00:00.000Z
    22020-03-23T09:00:00.000Z
    132020-04-21T10:00:00.000Z
    162019-06-24T10:00:00.000Z
    212020-02-29T10:00:00.000Z
    192020-05-02T10:00:00.000Z
    82020-01-21T12:00:00.000Z
    72019-09-17T10:00:00.000Z
    52020-05-15T10:00:00.000Z
    502019-11-25T11:00:00.000Z
    492020-06-11T10:00:00.000Z
    482019-11-10T10:00:00.000Z
    322020-01-18T13:00:00.000Z
    172019-11-05T09:00:00.000Z
    252020-04-22T09:00:00.000Z
    142020-02-12T10:00:00.000Z
    392019-12-09T10:00:00.000Z
    382020-03-23T10:00:00.000Z