SQL Server GROUPING SETS

Zusammenfassung: In diesem Tutorial lernen Sie, wie Sie SQL Server GROUPING SETS verwenden, um mehrere Gruppierungssätze zu erstellen.

Einrichten einer Umsatzübersichtstabelle

Zur Demonstration erstellen wir eine neue Tabelle namens sales.sales_summary.

Code language: SQL (Structured Query Language) (sql)

In dieser Abfrage rufen wir die Verkaufsbetragsdaten nach Marke und Kategorie ab und füllen sie in die Tabelle sales.sales_summary ein.

Die folgende Abfrage gibt Daten aus der Tabelle sales.sales_summary zurück:

Code language: SQL (Structured Query Language) (sql)

Einstieg in SQL Server GRUPPENSÄTZE

Definitionsgemäß ist ein Gruppierungssatz eine Gruppe von Spalten, nach denen Sie gruppieren. In der Regel definiert eine einzelne Abfrage mit einem Aggregat ein einzelnes Gruppierungsset.

Die folgende Abfrage definiert beispielsweise ein Gruppierungsset, das Marke und Kategorie enthält und als (brand, category) bezeichnet wird. Die Abfrage gibt den Verkaufsbetrag gruppiert nach Marke und Kategorie zurück:

Code language: SQL (Structured Query Language) (sql)

Die folgende Abfrage gibt den Verkaufsbetrag nach Marke zurück. Sie definiert ein Gruppierungsset (brand):

Code language: SQL (Structured Query Language) (sql)

Die folgende Abfrage gibt den Verkaufsbetrag nach Kategorie zurück. Sie definiert eine Gruppierungsgruppe (category):

Code language: SQL (Structured Query Language) (sql)

Die folgende Abfrage definiert eine leere Gruppierungsgruppe (). Sie gibt den Umsatzbetrag für alle Marken und Kategorien zurück.

Code language: SQL (Structured Query Language) (sql)

Die vier obigen Abfragen geben vier Ergebnissätze mit vier Gruppierungssätzen zurück:

Code language: SQL (Structured Query Language) (sql)

Um einen einheitlichen Ergebnissatz mit den aggregierten Daten für alle Gruppierungssätze zu erhalten, können Sie den Operator UNION ALL verwenden.

Da der UNION ALL-Operator erfordert, dass alle Ergebnissätze die gleiche Anzahl von Spalten haben, müssen Sie NULL zur Auswahlliste der Abfragen wie folgt hinzufügen:

Code language: SQL (Structured Query Language) (sql)

Die Abfrage erzeugt wie erwartet ein einziges Ergebnis mit den Aggregaten für alle Gruppierungssätze.

Es gibt jedoch zwei große Probleme:

  1. Die Abfrage ist recht langwierig.
  2. Die Abfrage ist langsam, weil SQL Server vier Unterabfragen ausführen muss und die Ergebnismengen zu einer einzigen kombiniert.

Um diese Probleme zu beheben, bietet SQL Server eine Unterklausel der GROUP BY-Klausel namens GROUPING SETS.

Die GROUPING SETS definiert mehrere Gruppierungssätze in derselben Abfrage. Die folgende Abbildung zeigt die allgemeine Syntax der GROUPING SETS:

Code language: SQL (Structured Query Language) (sql)

Diese Abfrage erstellt vier Gruppierungssätze:

Code language: SQL (Structured Query Language) (sql)

Sie können diese GROUPING SETS verwenden, um die Abfrage, die die Verkaufsdaten abruft, wie folgt umzuschreiben:

Code language: SQL (Structured Query Language) (sql)

Wie Sie sehen, liefert die Abfrage dasselbe Ergebnis wie diejenige, die den Operator UNION ALL verwendet. Diese Abfrage ist jedoch viel lesbarer und natürlich auch effizienter.

GROUPING-Funktion

Die GROUPING-Funktion gibt an, ob eine angegebene Spalte in einer GROUP BY-Klausel aggregiert ist oder nicht. Sie gibt 1 für aggregiert oder 0 für nicht aggregiert in der Ergebnismenge zurück.

Siehe das folgende Abfragebeispiel:

Code language: SQL (Structured Query Language) (sql)

Der Wert in der Spalte grouping_brand gibt an, ob die Zeile aggregiert ist oder nicht, 1 bedeutet, dass der Umsatz nach Marke aggregiert ist, 0 bedeutet, dass der Umsatz nicht nach Marke aggregiert ist. Das gleiche Konzept wird auf die Spalte grouping_category angewandt.

In diesem Lernprogramm haben Sie gelernt, wie man mehrere Gruppierungssätze in einer Abfrage mithilfe von SQL Server GROUPING SETS erzeugt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.