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 <a 1>] <s 2> [AS <a 2>]...
               <agg> <sm> [AS <a m>] <agg> <s n> [AS <a n>]...
...
  GROUP BY <s1> <s 2>....
  HAVING <cond>.

Die Bedingungen <cond> der HAVING-Klausel können die gleichen wie in der SELECT-Klausel sein, mit der Einschränkung, daß 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 Bedinging eingeschränkt, daß die Summe über den Inhalt der Spalte SEATSOCC über alle Zeilen einer Gruppe größer 300 sein muß.

Ende des Inhaltsbereichs