Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfragen und Datenänderung » Abfrageergebnisse zusammenfassen, gruppieren und sortieren » Die GROUP BY-Klausel: Abfrageergebnisse in Gruppen organisieren

 

Wie Abfragen mit GROUP BY ausgeführt werden

Dieser Abschnitt verwendet die Unterklausel ROLLUP der Klausel GROUP BY in der Erklärung und im Beispiel.

Gehen wir von einer Abfrage in einer einzelnen Tabelle der folgenden Form aus:

SELECT select-list
   FROM table
   WHERE where-search-condition
   GROUP BY [ group-by-expression | ROLLUP (group-by-expression) ]
   HAVING having-search-condition

Die Abfrage wird auf folgende Weise ausgeführt:

  1. WHERE-Klausel anwenden   Damit wird ein Zwischenergebnis erstellt, das nur einige Zeilen aus der Tabelle enthält.

    Das Zwischenergebnis enthält eine Teilmenge von Zeilen aus der Tabelle.

  2. Ergebnis in Gruppen teilen   Dieser Vorgang erstellt ein Zwischenergebnis mit einer Zeile für jede Gruppe gemäß den Anweisungen der GROUP BY-Klausel. Jede generierte Zeile enthält den GROUP BY-Ausdruck group-by-expression für jede Gruppe und die berechneten Aggregatfunktionen in der Auswahlliste select-list und der HAVING-Suchbedingung having-search-condition.

    Ein zweites Zwischenergebnis wird durch das Anwenden einer Group By_Klausel verkleinert.

  3. Einen ROLLUP-Vorgang anwenden   Zwischensummen-Zeilen, die als Teil eines ROLLUP-Vorgangs berechnet werden, werden der Ergebnismenge hinzugefügt.

  4. HAVING-Klausel anwenden   Zeilen aus diesem zweiten Zwischenergebnis, die die Kriterien der HAVING-Klausel nicht erfüllen, werden an dieser Stelle entfernt.

  5. Ergebnisse für die Anzeige zusammenstellen (Projektion)   Bei diesem Vorgang werden aus Schritt 3 nur jene Spalten entnommen, die in der Ergebnismenge der Abfrage angezeigt werden müssen - also nur die Spalten, die den Ausdrücken aus der select-list entsprechen.

    Die endgültig Ergebnismenge ist eine Projektion der zweiten Zwischenergebnismenge.

Dieser Vorgang stellt an Abfragen mit einer GROUP BY-Klausel einige Anforderungen:

  • Die WHERE-Klausel wird zuerst aufgelöst. Daher werden Aggregatfunktionen nur über diese Zeilen aufgelöst, die den Bedingungen der WHERE-Klausel entsprechen.

  • Die endgültige Ergebnismenge wird aus dem zweiten Zwischenergebnis erstellt, das die aufgeteilten Zeilen enthält. Das zweite Zwischenergebnis enthält Zeilen, die dem group-by-expression entsprechen. Wenn daher ein Ausdruck, der keine Aggregatfunktion ist, in der select-list vorkommt, dann muss er auch im group-by-expression vorkommen. Während der Projektionsphase kann keine Funktionsauflösung erfolgen.

  • Ein Ausdruck kann in den group-by-expression, aber nicht in die select-list einbezogen sein. Er wird im Ergebnis verworfen.

 Siehe auch