Modul Datenbanken IN EF Gymnasium Lerbermatt
Docs » sql:group

Datensätze mit GROUP BY gruppieren

Syntax von GROUP BY

[GROUP BY Attribut [, Attribut] [HAVING Bedingung] ]

Gruppierungen von Datensätzen wird in den allermeisten Fällen zusammen mit Aggregatsfunktionen verwendet (weil es sonst einfach keinen Sinn macht). Schauen wir ein Beispiel an.

Sie haben eine Tabelle "tblAngestellte" mit 9 Datensätzen. Einige wohnen in den USA, einige in UK und zwei Personen in der Schweiz.

Geben Sie mal den folgenden SQL-Befehl ein:

SELECT * FROM tblAngestellte GROUP BY tNachname;

Was kriegen Sie? Vergleichen Sie die Ausgabe mit der Orginal-Tabelle. Was hat sich geändert?

Schräg, nicht? Wir haben nicht mehr 9, sondern 8 Angestellte. Wo zum Geier ist da jemand verlorengegangen?

Wenn Sie gut schauen, sehen Sie, dass wir zwei Meier haben: Meier Susi aus Bern und Meier Michael aus Thun.

Und obiges GROUP BY-Statement macht nichts anderes, als alle Attribute im GROUP BY Statement zu gruppieren, konkret, die doppelten rauszuwerfen.

Warum aber gerade das Susi aus Bern angezeigt wird und nicht der Michael aus Thun, ist unklar.

Ein GROUP BY macht höchstens dann mal Sinn, wenn Sie beispielsweise eine Liste aller Länder möchten, in welchen die Angestellten wohnen. Da möchten Sie natürlich keine doppelten Datensätze kriegen. Dann kann folgender Befehl durchaus Sinn machen:

SELECT Country FROM tblAngestellte GROUP BY Country;

Aber für alle anderen Fälle nehmen wir die Aggregationsfunktionen dazu, welche jetzt gleich erklärt werden.

Aufgabe 1

Es erscheint eine leere Zeile. Was könnte das sein?

Lösung

Wenn Sie die Tabelle aufmerksam anschauen, sehen Sie, dass die Laura Callahan kein Land zugeordnet hat (Mist!). Dieses "Leer" wird auch entsprechend als Element in der Gruppierung angezeigt.

Aggregation mit Berechnungen

Unter Aggregierung versteht man das Gleiche wie "Gruppierung", meint aber meist auch gleich, dass man pro Gruppe eine Berechnung vornehmen will. Und solche Funktionen, mit denen man im Zusammenhang mit GROUP BY Berechnungen anstellen kann, werden "Aggregationsfunktionen" genannt.

Beispielsweise wollen wir wissen, wie viele Angestellte pro Land vorhanden sind.

Die SQL-Anweisung könnte wie folgt aussehen:

SELECT Country, COUNT(Country) FROM tblAngestellte GROUP BY Country;

Dies führt zu folgender Ausgabe:

Hier sehen Sie nun sofort in der ersten Zeile, dass eine Person kein Land zugeordnet hat. Der Rest sollte selbsterklärend sein😎.

Aufgabe 2

Sie sehen, dass die Spaltenüberschriften nicht sonderlich schön sind. Passen Sie das SQL-Statement so an, dass die Ausgabe wie folgt aussieht:

Lösung

Das hatten wir ganz zu Beginn in Erste Schritte mit SELECT angeschaut. Sie können die Spaltenüberschriften der Ausgabe anpassen:

SELECT Country AS Land, COUNT(Country) AS Anzahl FROM tblAngestellte GROUP BY Country;

Die Liste ist schon mal prima, aber Ihre Chefin möchte diese gerne gleich so sortiert haben, dass die grösste Anzahl oben steht.

Aufgabe 3

Sortieren Sie die Liste also so, dass sie rückwärts sortiert dargestellt wird.

Lösung

Das hatten wir im Kapitel Datensätze sortieren mit ORDER BY angeschaut:

SELECT Country AS Land, COUNT(Country) AS Anzahl FROM tblAngestellte GROUP BY Country ORDER BY Anzahl DESC;

Die Chefin ist immer noch nicht zufrieden🙈. Dass es Angestellte ohne Land hat, ist für sie ein technisches Problem, das wir zwar lösen sollen, aber sie interessiert sich nur für diejenigen Angestellten, welche wirklich ein auch ein Land zugeordnet haben.

Aufgabe 4

Passen Sie Ihr SQL-Statement so an, dass die Liste die leere Zeile ausblendet, also so:

Tipp: spicken Sie sonst kurz im Kapitel Die SELECT-Anweisung.

Lösung

Es braucht einfach noch eine WHERE-Klausel am richtigen Ort:

SELECT Country AS Land, COUNT(Country) AS Anzahl FROM tblAngestellte WHERE Country <> "" GROUP BY Country ORDER BY Anzahl DESC;

Weitere Aggregatsfunktionen

Sämtliche Aggregatsfunktionen kennen Sie bereits, und zwar von Excel! Hier die Funktionen, um die es geht:

  • COUNT (Anzahl)
  • SUM (Summe)
  • AVG (Mittelwert)
  • MIN
  • MAX

Sie können diese ohne Probleme auch kombinieren. Beispielsweise so:

Aufgabe 5

Versuchen Sie, mit Hilfe der Tabelle "tblBestellungen" diese Ausgabe zu erstellen.

Hinweis: hier benötigen Sie keine GROUP BY-Klausel, sondern nur zwei der obigen Funktionen.

Lösung

Die grundlegende SQL-Anweisung sieht so aus:

SELECT COUNT(tKundenID), SUM(tFrachtkosten) FROM tblBestellungen;

Dann sehen die Spaltenüberschriften aber wieder hässlich aus. Also benennen Sie diese wiederum um:

SELECT COUNT(tKundenID) AS "Anzahl Bestellungen", SUM(tFrachtkosten) AS "Gesamtfrachtkosten" FROM tblBestellungen;

Jetzt kann es sein, dass die Summe der Frachtkosten noch ganz viele Nachkommastellen anzeigt, was auch nicht schön ist. Also runden wir dieses Feld mit der Funktion round auf 0 Nachkommastellen. Und das geht genau gleich wie in Excel:

SELECT COUNT(tKundenID) AS "Anzahl Bestellungen", SUM(round(tFrachtkosten,0)) AS "Gesamtfrachtkosten" FROM tblBestellungen;

Jetzt können wir das Ganze noch nach nach tKundenID gruppieren. Dann sollten Sie eine Liste wie die folgende kriegen:

Hier der SQL-Befehl mit der ergänzten GROUP BY-Klausel:

SELECT COUNT(tKundenID) AS "Anzahl Bestellungen", SUM(round(tFrachtkosten,0)) AS "Gesamtfrachtkosten" FROM tblBestellungen GROUP BY tKundenID;

Das ist zwar gut und recht, aber wir haben ein Problem…

Aufgabe 6

Schauen Sie sich die Liste an. Was sagt die genau aus? Was bringt und das nun?

Lösung

Die bringt uns herzlich wenig…sie sagt zwar, dass einen Kunden gibt, der 6 Bestellungen und Frachkosten von CHF 225.- hat. Oder dass es eine Kundin mit 4 Bestellungen gibt mit Frachtkosten von CHF 98.-, etc.).

Aber wir sehen nicht, welcher Kunde das ist…und das macht wenig Sinn.

Also ergänzen wir das Attribut "tKundenID" ganz links noch, und danach sieht die Liste so aus:

Selbstverständlich wäre es schön, wenn wir hier gleich den Namen der Kund*innen lesen könnten. Wie gesagt, kommt das dann im Kapitel JOIN in Aktion.

Previous Next

Modul Datenbanken IN EF Gymnasium Lerbermatt

Table of Contents

Inhaltsverzeichnis

  • Datensätze mit GROUP BY gruppieren
    • Syntax von GROUP BY
      • Aufgabe 1
    • Aggregation mit Berechnungen
      • Aufgabe 2
      • Aufgabe 3
      • Aufgabe 4
    • Weitere Aggregatsfunktionen
      • Aufgabe 5
      • Aufgabe 6

Theorie

  • Grundlagen zu Datenbanken
  • Datenbank-Modelle
  • Relationale Datenbanken
  • Die Abfragesprache SQL

Installation von Software

  • Demo-Datenbank herunterladen
  • SQLite installieren
  • SQLiteStudio verwenden
  • DB Browser for SQLite verwenden

Einführung in SQL

  • Erste Schritte mit SELECT
  • ORDER BY
  • LIMIT
  • WHERE
  • GROUP BY und Aggregation
  • Weitere Berechnungen
  • SELECT vollständig

Über mehrere Tabelle abfragen

  • Was ist ein JOIN?
  • JOIN mit zwei Tabellen
  • JOIN mit drei Tabellen
  • Noch mehr JOINs 😂
  • Noch ein paar Übungen