3.8 GROUP BY
Mit Hilfe der GROUP BY
-Klausel können Datensätze des Abfrageergebnisses, die in einer oder mehreren Spalten gleiche Werte besitzen, zu jeweils einer Gruppe zusammengefasst werden.
Häufig werden dabei im SELECT
-Abschnitt Aggregatfunktionen eingesetzt, um für jede Gruppe die Werte ausgewählter Spalten zu aggregieren (zum Beispiel Addieren, Mittelwert bilden, größten bzw. kleinsten Wert ermitteln).
Beispiele
[Hinweis: Für dieses Beispiel wurde die Tabelle Fahrrad um zwei Datensätze erweitert.]
Die Tabelle Fahrrad wird um zwei Datensätze erweitert.
-
Gewünscht wird eine Übersicht, die die Summe der Anschaffungskosten je Fahrradtyp (Fahrradtyp_ID) ausweist.
Die Tabelle Fahrrad enthält sowohl die Fahrradtyp_ID als auch die Anschaffungskosten eines jeden Fahrrads.
Tabelle Fahrrad
ID Kennung Anschaffungskosten ↑Fahrradtyp_ID 1 Cross#7 670.00 1 2 Mark#2 750.00 2 3 Silver#1 850.00 2 4 Winter#1 730.00 1 Abb. 3-93: Tabelle Fahrrad Mit Hilfe der
GROUP BY
-Klausel fassen wir im Abfrageergebnis alle Datensätze, die in der Spalte Fahrradtyp_ID den gleichen Wert besitzen, zu einer Gruppe zusammen. Die AggregatfunktionSUM(Anschaffungskosten)
addiert nun für jede Gruppe die Werte der Spalte Anschaffungskosten.Abfrageergebnis
Fahrradtyp_ID Anschaffungskosten 1 1400.00 2 1600.00 Abb. 3-95: Abfrageergebnis der SQL-Anweisung aus Abb. 3-94. -
Gewünscht wird eine Übersicht, die die Anzahl der Fahrräder je Fahrradtyp (Fahrradtyp_ID) ausweist.
Abfrageergebnis
Fahrradtyp_ID Anzahl 1 2 2 2 Abb. 3-97: Abfrageergebnis der SQL-Anweisung aus Abb. 3-96.
Aufgabe 3-13: Gruppierung
Datenbank Firmenwagen
Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:
-
Gewünscht wird eine Übersicht, die die Summe der Anschaffungskosten je Fahrzeugmodell (Fahrzeugmodell_ID) ausweist.
Lösung
Lösung
SQLSELECT Fahrzeugmodell_ID, SUM(Anschaffungskosten) AS Kosten
FROM Fahrzeug
GROUP BY Fahrzeugmodell_ID;Abb. 3-100: SQL-Anweisung -
Gewünscht wird eine Übersicht, die für alle vorhandenen Fahrzeugmodelle (Modellbezeichnung) jeweils den Durchschnitt der Anschaffungskosten aller Firmenwagen des jeweiligen Modells ausweist.
Lösung
Lösung
SQLSELECT Bezeichnung, AVG(Anschaffungskosten) AS AK_Durchschnitt
FROM Fahrzeug INNER JOIN Fahrzeugmodell ON Fahrzeugmodell_ID=Fahrzeugmodell.ID
GROUP BY Fahrzeugmodell.ID;Abb. 3-101: SQL-Anweisung -
Gewünscht wird eine Übersicht, die für alle Mitarbeiter (Nachname und Vorname) jeweils die Anzahl der Reservierungen ausweist.
Lösung
Lösung
SQLSELECT Nachname, Vorname, COUNT(*) AS Anzahl_Reservierungen
FROM Reservierung INNER JOIN Mitarbeiter ON Mitarbeiter_ID = Mitarbeiter.ID
GROUP BY Mitarbeiter.ID;Abb. 3-102: SQL-Anweisung -
Gewünscht wird eine Übersicht, die für alle vorhandenen Fahrzeugmodelle (Hersteller und Modellbezeichnung) jeweils die Anzahl der von diesem Modell vorhandenen Firmenwagen ausweist.
Lösung
Lösung
SQLSELECT Hersteller, Bezeichnung, COUNT(*) AS Anzahl
FROM Fahrzeug INNER JOIN Fahrzeugmodell ON Fahrzeugmodell_ID=Fahrzeugmodell.ID
GROUP BY Fahrzeugmodell.ID;Abb. 3-103: SQL-Anweisung -
Gewünscht wird eine Übersicht, die für jedes Fahrzeugmodell (Hersteller und Modellbezeichnung) die bisher angefallenen Instandhaltungskosten ausweist.
Lösung
Lösung
SQLSELECT Hersteller, Bezeichnung, SUM(Kosten) AS Gesamtkosten
FROM Fahrzeug
INNER JOIN Fahrzeugmodell
ON Fahrzeugmodell_ID=Fahrzeugmodell.ID
INNER JOIN Instandhaltung
ON Fahrzeug.ID=Fahrzeug_ID
GROUP BY Fahrzeugmodell.ID;Abb. 3-104: SQL-Anweisung -
Gewünscht wird eine Übersicht, die für alle Hersteller (Herstellerbezeichnung) jeweils die Anschaffungskosten des teuersten von diesem Hersteller bisher angeschafften Fahrzeugs ausweist.
Lösung
Lösung
SQLSELECT Hersteller, MAX(Anschaffungskosten) AS AK_Max
FROM Fahrzeug INNER JOIN Fahrzeugmodell ON Fahrzeugmodell_ID=Fahrzeugmodell.ID
GROUP BY Hersteller;Abb. 3-105: SQL-Anweisung