SQL: Datensätze gruppieren mit GROUP BY

SELECT und WHERE geben einzelne Datensätze aus, es erfolgt jedoch keine Aggregation oder Gruppierung der Daten. Mit Aggregatfunktionen können Kennziffern über die gesamte Tabelle ermittelt, um jedoch Kennziffern nach bestimmten Kriterium zu splitten benötigt man das GROUP BY-Statement. Der GROUP BY-Befehl ermöglicht es ein Resultset zu gruppieren und fasst alle Zeilen, die in einer oder mehreren Spalten den gleichen Wert enthalten, zu jeweils einer Gruppe zusammen. Die allgemeine SQL-Syntax lautet:

SELECT column_name1, AggFunction(column_name2)  FROM table GROUP BY column_name1;

Beachte:

  • Jeder Spaltenname der SELECT-Auswahl, der nicht zu einer Aggregatfunktion gehört, muss auch in der GROUP BY-Klausel benutzt werden
  • Umgekehrt ist es möglich, eine Spalte zu gruppieren, ohne die Spalte selbst in der SELECT-Liste zu verwenden, allerdings möchte man das Gruppierungskriterium zur Übersicht meist in der Datensatzausgabe mit angeben
  • Jeder SELECT-Befehl darf einschließlich aller Unterabfragen höchstens eine GROUP BY-Klausel enthalten

GROUP-BY Beispiel:

In der Tabelle „film“ haben wir Filme mit 3 verschiedene Leihgebühren:

SELECT DISTINCT(rental_rate) FROM film;

Wir möchten die Anzahl der Filme für die verschiedenen Leihgebühren ermitteln. Das SQL Statement mit der GROUP BY-Bedingung lautet:

SELECT rental_rate, COUNT(rental_rate) AS AnzahlFilme FROM film GROUP BY rental_rate;

GROUP-BY Beispiel mit mehreren Argumenten:

Es ist auch möglich nach mehreren Spalten zu gruppieren. Dazu werden die verschiedenen Spaltennamen im GROUP BY-Befehl furch ein Komma getrennt. Schauen wir z.B. wie viele Filme es mit eine bestimmten Leihgebühr und –dauer es gibt:

SELECT rental_rate, rental_duration, COUNT(rental_rate) AS AnzahlFilme FROM film GROUP BY rental_rate, rental_duration ORDER BY rental_rate;

Zur besseren Übersicht können wir die Datensätze noch nach der Leihgebühr aufsteigend sortieren:

Wir sehen, es gibt 78 Filme, die für eine Leihgebühr von 0,99 für 3 Tage ausgeliehen werden.

GROUP-BY Beispiel mit WHERE-Bedingung:

Nun möchten wir die Anzahl der Filme für die verschiedenen Leihgebühren ermitteln, wenn der Film eine Filmlänge von 46 Minuten hat. Das SQL Statement mit der WHERE und  GROUP BY-Bedingung lautet:

SELECT rental_rate, COUNT(rental_rate) AS AnzahlFilme FROM film where LENGTH = 46 GROUP BY rental_rate;

Zum Check kann man sich nochmal alle Filmtitel mit einer Filmlänge von 46 Minuten ausgeben lassen:

(Visited 16.365 times, 1 visits today)

Eine Antwort auf „SQL: Datensätze gruppieren mit GROUP BY“

  1. Mir gefällt:
    – es ist alles drin, was rein muss.
    – es ist nichts Überflüssiges drin.
    – es steht ein Datum der Veröffentlichung am Anfang.

    Vielen Dank, das war sehr hilfreich.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert