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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » 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. Weitere Hinweise zur ROLLUP-Klausel finden Sie unter ROLLUP und CUBE als Abkürzung für GROUPING SETS verwenden.

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

SELECT Auswahlliste
   FROM Tabelle
   WHERE WHERE-Suchbedingung
   GROUP BY [ GROUP BY-Ausdruck | ROLLUP (GROUP BY-Ausdruck]
   HAVING HAVING-Suchbedingung

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 für jede Gruppe und die berechneten Aggregatfunktionen in der Auswahlliste und der HAVING-Suchbedingung.

    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 Auswahlliste 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-Ausdruck entsprechen. Wenn daher ein Ausdruck, der keine Aggregatfunktion ist, in der Auswahlliste vorkommt, dann muss er auch im GROUP BY-Ausdruck vorkommen. Während der Projektionsphase kann keine Funktionsauflösung erfolgen.

  • Ein Ausdruck kann in den GROUP BY-Ausdruck, aber nicht in die Auswahlliste einbezogen sein. Er wird im Ergebnis verworfen.