PostgreSQL GROUPING SETS

author
2 minutes, 54 seconds Read

Zusammenfassung: In diesem Tutorial lernen Sie das Konzept der Gruppierungssätze kennen und wie Sie die PostgreSQL GROUPING SETS Klausel verwenden, um mehrere Gruppierungssätze in einer Abfrage zu erzeugen.

Einrichten einer Beispieltabelle

Fangen wir an, indem wir eine neue Tabelle namenssales für die Demonstration erstellen.

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

Die Tabelle sales speichert die Anzahl der verkauften Produkte nach Marke und Segment.

Einführung in PostgreSQL GRUPPENSÄTZE

Ein Gruppierungssatz ist ein Satz von Spalten, nach denen Sie mithilfe der GROUP BY-Klausel gruppieren.

Ein Gruppierungssatz wird durch eine kommagetrennte Liste von Spalten in Klammern angegeben:

Die folgende Abfrage verwendet beispielsweise die GROUP BY-Klausel, um die Anzahl der verkauften Produkte nach Marke und Segment zurückzugeben. Mit anderen Worten, sie definiert eine Gruppierungsmenge der Marke und des Segments, die durch (brand, segement)

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

Die folgende Abfrage findet die Anzahl der von einer Marke verkauften Produkte. Sie definiert eine Gruppierungsmenge (brand):

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

Die folgende Abfrage ermittelt die Anzahl der verkauften Produkte nach Segment. Sie definiert eine Gruppierungsmenge (segment):

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

Die folgende Abfrage ermittelt die Anzahl der verkauften Produkte für alle Marken und Segmente. Sie definiert eine leere Gruppierungsmenge, die durch ().

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

Angenommen, Sie möchten alle Gruppierungsmengen mit einer einzigen Abfrage ermitteln. Um dies zu erreichen, können Sie UNION ALL verwenden, um alle obigen Abfragen zu kombinieren.

Da UNION ALL erfordert, dass alle Ergebnissätze die gleiche Anzahl von Spalten mit kompatiblen Datentypen haben, müssen Sie die Abfragen anpassen, indem Sie NULL zur Auswahlliste der einzelnen Abfragen hinzufügen, wie unten gezeigt:

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

Diese Abfrage erzeugt einen einzigen Ergebnissatz mit den Aggregaten für alle Gruppierungssätze.

Auch wenn die obige Abfrage wie erwartet funktioniert, hat sie zwei Hauptprobleme:

  • Erstens ist sie ziemlich lang.
  • Zweitens hat sie ein Leistungsproblem, weil PostgreSQL die salesTabelle für jede Abfrage separat scannen muss.

Um dies effizienter zu machen, bietet PostgreSQL die GROUPING SETS-Klausel an, die eine Unterklausel der GROUP BY-Klausel ist.

Die GROUPING SETS-Klausel ermöglicht es, mehrere Gruppierungssätze in derselben Abfrage zu definieren.

Die allgemeine Syntax der GROUPING SETS ist wie folgt:

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

In dieser Syntax gibt es vier Gruppierungsgruppen (c1,c2), (c1), (c2) und ().

Um diese Syntax auf das obige Beispiel anzuwenden, können Sie die GROUPING SETS-Klausel anstelle der UNION ALL-Klausel wie folgt verwenden:

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

Diese Abfrage ist viel kürzer und besser lesbar. Außerdem optimiert PostgreSQL die Anzahl der Scans der sales Tabelle und scannt nicht mehrfach.

Gruppierungsfunktion

Die GROUPING() Funktion akzeptiert ein Argument, das ein Spaltenname oder ein Ausdruck sein kann:

Der column_name oder expression muss mit dem in der GROUP BY Klausel angegebenen übereinstimmen.

Die Funktion GROUPING() gibt Bit 0 zurück, wenn das Argument ein Mitglied des aktuellen Gruppierungssatzes ist, und ansonsten 1.

Siehe folgendes Beispiel:

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

Wenn der Wert in grouping_brand 0 ist, zeigt die Spalte sum die Zwischensumme von brand an.

Wenn der Wert in grouping_segment 0 ist, zeigt die Spalte Summe die Zwischensumme von segment an.

Sie können die GROUPING()-Funktion in der HAVING-Klausel verwenden, um die Zwischensumme jeder Marke wie folgt zu ermitteln:

In diesem Lernprogramm haben Sie gelernt, wie Sie die PostgreSQL GROUPING SETS-Funktion verwenden, um mehrere Gruppierungssätze zu erstellen.

  • War dieses Tutorium hilfreich?
  • JaNein

Similar Posts

Schreibe einen Kommentar

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