Show TOC Anfang des Inhaltsbereichs

Zeilengruppen auswählen  Dokument im Navigationsbaum lokalisieren

Die HAVING-Klausel schränkt die Anzahl der selektierten Zeilengruppen durch Bedingungen ein.

Diese Grafik wird im zugehörigen Text erklärt

Die HAVING-Klausel kann nur in Verbindung mit der GROUP-BY-Klausel verwendet werden.

Um Zeilengruppen auszuwählen schreibt man:

SELECT lines s1 [AS a1] s2 [AS a2]...
             agg sm [AS am] agg sn [AS an]...
...
  
GROUP BY s1 s2....
  HAVING cond.

Die Bedingungen cond der HAVING-Klausel können die gleichen wie in der SELECT-Klausel sein, mit der Einschränkung, dass hier nur Spalten aus der SELECT-Klausel verwendet werden können und nicht alle Spalten der Datenbanktabellen aus der FROM-Klausel. Die Angabe einer falschen Spalte führt zu einem Laufzeitfehler.

Auf der anderen Seite können in den Bedingungen der HAVING-Klausel Aggregatausdrücke für alle Spalten der gelesenen Datenbanktabellen angegeben werden, die nicht in der GROUP-BY-Klausel stehen. Es können also auch Aggregatausdrücke verwendet werden, die nicht in der SELECT-Klausel aufgeführt sind. In den Bedingungen der WHERE-Klausel können keine Aggregatausdrücke stehen.

Die Bedingungen der HAVING-Klausel können wie in der WHERE-Klausel dynamisch als Inhalt einer internen Tabelle vom Zeilentyp c der Länge 72 angegeben werden.

Beispiel

REPORT demo_select_group_by_having.

DATA wa TYPE sflight.

SELECT     connid
  INTO     wa-connid
  FROM     sflight
  WHERE    carrid = 'LH'
  GROUP BY connid
  HAVING   SUM( seatsocc ) > 300.

  WRITE: / wa-carrid, wa-connid.

ENDSELECT.

Es werden aus den Zeilen der Datenbanktabelle SFLIGHT mit dem Inhalt 'LH' in der Spalte CARRID Gruppen für gleichen Inhalt der Spalte CONNID gebildet. Die Gruppen werden nochmals mit der Bedingung eingeschränkt, dass die Summe über den Inhalt der Spalte SEATSOCC über alle Zeilen einer Gruppe größer 300 sein muss.

 

Ende des Inhaltsbereichs