Die GROUPING SETS-Klausel ist eine Erweiterung zur GROUP BY-Klausel einer SELECT-Anweisung. Die GROUPING SETS-Klausel ermöglicht die Gruppierung der Ergebnisse auf mehrere Arten, ohne mehrere SELECT-Anweisungen benutzen zu müssen. Damit wird die Reaktionszeit verringert und die Performance verbessert.
Die folgenden beiden Abfrageanweisungen sind beispielsweise semantisch gleichwertig: Die zweite Abfrage definiert die Gruppierungskriterien jedoch effizienter, da eine GROUP BY GROUPING SETS-Klausel verwendet wird.
Mehrfachgruppierungen mithilfe von SELECT-Anweisungen:
SELECT NULL, NULL, NULL, COUNT( * ) AS Cnt FROM Customers WHERE State IN ( 'MB' , 'KS' ) UNION ALL SELECT City, State, NULL, COUNT( * ) AS Cnt FROM Customers WHERE State IN ( 'MB' , 'KS' ) GROUP BY City, State UNION ALL SELECT NULL, NULL, CompanyName, COUNT( * ) AS Cnt FROM Customers WHERE State IN ( 'MB' , 'KS' ) GROUP BY CompanyName; |
Mehrfachgruppierungen mithilfe von GROUPING SETS:
SELECT City, State, CompanyName, COUNT( * ) AS Cnt FROM Customers WHERE State IN ( 'MB' , 'KS' ) GROUP BY GROUPING SETS( ( City, State ), ( CompanyName ) , ( ) ); |
Beide Methoden liefern die gleichen Ergebnisse:
City | State | CompanyName | Cnt | |
---|---|---|---|---|
1 | (NULL) | (NULL) | (NULL) | 8 |
2 | (NULL) | (NULL) | Cooper Inc. | 1 |
3 | (NULL) | (NULL) | Westend Dealers | 1 |
4 | (NULL) | (NULL) | Toto's Active Wear | 1 |
5 | (NULL) | (NULL) | North Land Trading | 1 |
6 | (NULL) | (NULL) | The Ultimate | 1 |
7 | (NULL) | (NULL) | Molly's | 1 |
8 | (NULL) | (NULL) | Overland Army Navy | 1 |
9 | (NULL) | (NULL) | Out of Town Sports | 1 |
10 | 'Pembroke' | 'MB' | (NULL) | 4 |
11 | 'Petersburg' | 'KS' | (NULL) | 1 |
12 | 'Drayton' | 'KS' | (NULL) | 3 |
Die Zeilen 2 - 9 sind die Zeilen, die durch die Gruppierung nach "CompanyName" generiert wurden. Die Zeilen 10 - 12 sind die Zeilen, die durch die Gruppierung nach der Kombination von "City" und "State" generiert wurden. Die Zeile 1 ist die Gesamtsumme, die durch die leere Gruppierungskombination repräsentiert wird, welche durch ein Klammernpaar angegeben wird (). Die leere Gruppierungskombination repräsentiert eine einzelne Partition aller Zeilen in der Eingabe für die GROUP BY-Klausel.
Beachten Sie, dass NULL als Platzhalter für alle Ausdrücke verwendet wird, die nicht in einer Gruppierungskombination benutzt werden, da die Ergebnismengen kombinierbar sein müssen. Die Zeilen 2 - 9 ergeben sich beispielsweise aus der zweiten Gruppierungskombination in der Abfrage (CompanyName). Da diese Gruppierungskombination weder "City" noch "State" als Ausdrücke enthielt, enthalten die Werte für "City" und "State" für die Zeilen 2 - 9 den Platzhalter NULL, während die Werte in "CompanyName" die unterschiedlichen Werte enthalten, die in "CompanyName" vorkommen.
Da NULL als Platzhalter benutzt wird, wird dieser leicht mit den tatsächlichen NULL-Werten in den Daten verwechselt. Die GROUPING-Funktion hilft Ihnen bei der Unterscheidung des Platzhalters NULL vom Datenwert NULL. Siehe NULL-Platzhalter mithilfe der GROUPING-Funktion löschen.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |