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:
WHERE-Klausel anwenden
Damit wird ein Zwischenergebnis erstellt, das nur einige Zeilen aus der Tabelle enthält.
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.
Einen ROLLUP-Vorgang anwenden
Zwischensummen-Zeilen, die als Teil eines ROLLUP-Vorgangs berechnet werden, werden der Ergebnismenge hinzugefügt.
HAVING-Klausel anwenden
Zeilen aus diesem zweiten Zwischenergebnis, die die Kriterien der HAVING-Klausel nicht erfüllen, werden an dieser Stelle entfernt.
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.
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.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |