Die Ergebnisse einer Select-Anweisung können mit Hilfe der Group by-Klausel gruppiert werden. Dazu wird wieder eine Select-Anweisung geschrieben, am Ende wird dann die Group by-Klausel angehängt. Die Group by-Klausel gruppiert dann die gleiche Werte einer Spalte zu einer Ergebnisspalte zusammen.

ID Name Vorname Alter
1 Mustermann Klaus 43
2 Musterfrau Elke 39
3 Musterkind Heinz 17
4 Musterkind Karl 15

Beispiel: select sum(alter) as summe, name from personen group by name;

In diesem Beispiel werden alle Einträge der Tabelle Personen auf die Namensspalte gruppiert. Als Rückgabespalten wurde eine Aggregatsfunktion (Sum) und die Namensspalte verwendet. In diesem Select können die Einträge mit ID 3 und 4 gruppiert werden, da sie in der Spalte ‚Name‘ den gleichen Eintrag haben. Mit Sum werden die Werte dieser Einträge aus der Spalte ‚Alter‘ zusammengezählt.

Summe Name
43 Mustermann
39 Musterfrau
32 Musterkind

Bei der Auswahl der Rückgabespalten ist man jetzt jedoch eingeschränkt. Spalten, die bei der Gruppierung mehrere Werte haben können, dürfen nicht als Rückgabespalten angegeben werden.

Weiteres Beispiel: select count(*) as summe, name from personen group by name;

Summe Name
1 Mustermann
1 Musterfrau
2 Musterkind

Meistens wird Group by-Klausel benutzt, um die Anzahl der verschiedenen Einträge für eine Spalte oder mehrere Spalten zu ermitteln.

Wenn auf weitere Spalten gruppiert werden soll, so werden diese kommagetrennt angehängt. Nun müssen jedoch alle angebenen Spalten gleichzeitig für eine Spalte den gleichen Wert haben, damit diese gruppiert werden.

ID Name Vorname Alter
1 Mustermann Klaus 43
2 Musterfrau Elke 39
3 Musterkind Heinz 15
4 Musterkind Karl 15

Haben zum Beispiel beide Kinder das gleiche Alter, so können diese wieder gruppiert werden, wenn die Gruppierung diesmal über den Namen und das Alter passieren soll:

select count(*) as summe, name from personen group by name, alter;

Die Gruppierung erfolgt nach der Reihenfolge der angebenen Spalten. Die stärkste Gruppierung/Bindung hat somit die erste angegebene Spalte, hier ‚Name‘.

 Antworten

   
Impressum Suffusion theme by Sayontan Sinha