## Bilden von Gruppen: GROUP BY, HAVING

### Voraussetzungen

Sie benötigen die Demo-Daten für das SQL-Tutorial.

Starten Sie das Query Tool SQL Studio als Datenbankadministrator MONA mit dem Kennwort RED und melden Sie sich an die Demo-Datenbankinstanz DEMODB an.

### Gruppieren von Werten: GROUP BY

Mit Hilfe der GROUP-Klausel können Sie die Werte einer Spalte gruppieren und für jede dieser Gruppen gegebenenfalls weitere Berechnungen anhand der anderen Spaltenwerte durchführen. Außer für die zu gruppierende Spalte müssen Sie für jede andere Spalte eine Set-Funktion angeben. Die GROUP-Klausel müssen Sie nach der FROM- und WHERE-Klausel angeben.

SELECT type, SUM(free)
FROM hotel.room
GROUP BY type

Anzahl der freien Zimmer, gruppiert nach Zimmertyp

Die hier verwendete Set-Funktion ist die Funktion SUM, die die Summe der Werte bildet.

Ergebnis

Da die zweite Spalte der Ergebnistabelle keine vordefinierte Bezeichung erhält, wird vom Datenbanksystem die Spaltenbezeichnung EXPRESSION1 gewählt.

TYPE | EXPRESSION1
Double | 1088
Single | 376
Suite | 336

SELECT type, MIN(price) min_price, FIXED (AVG(price),5,2) avg_price, MAX(price) max_price
FROM hotel.room
GROUP BY type

Berechnen der Preiskategorien der Zimmer, gruppiert nach Zimmertyp

Die hier verwendeten Set-Funktionen sind MIN (minimaler Wert), AVG (Durchschnittswert) und MAX (Maximalwert).

Ergebnis

Die Spalten der Ergebnistabelle erhalten die Bezeichungen MIN_PRICE, AVG_PRICE und MAX_PRICE.

TYPE | MIN_PRICE | AVG_PRICE | MAX_PRICE
Double | 80 | 160.67 | 270
Single | 45 | 96.67 | 160
Suite | 300 | 475 | 700

Siehe auch:

Weitere Beispiele für die Angabe von Set-Funktionen

SQL-Referenzhandbuch, GROUP-Klausel

### Gruppen mit Bedingungen: HAVING

Mit Hilfe der GROUP-Klausel können Sie die Werte einer Spalte gruppieren. Mit Hilfe der HAVING-Klausel können Sie anschließend Gruppen aus der Zwischenergebnistabelle ausschließen. Im Unterschied zum Verwenden der WHERE-Klausel für das Ausschließen von Werten, geht dem Gebrauch der HAVING-Klausel im Normalfall die Verwendung einer Set-Funktion, die sich auf eine gesamte Spalte einer Zwischenergebnistabelle bezieht, voraus.

SELECT type, MIN(price) min_price, FIXED(AVG(price),5,2) avg_price, MAX(price) max_price
FROM hotel.room
GROUP BY type
HAVING MIN(price) >= 70

Berechnen der Preiskategorien der Zimmer, gruppiert nach Zimmertyp, Anzeige nur der Zimmertypen, die Zimmer zum Preis von mindestens 80 Euro haben

Ergebnis

TYPE | MIN_PRICE | AVG_PRICE | MAX_PRICE
Double | 80 | 160.67 | 270
Suite | 300 | 475 | 700

Siehe auch:

SQL-Referenzhandbuch, HAVING-Klausel

Weitere Beispiele zur Datenanfrage