SQL Server GROUPING SETS
Samenvatting: in deze tutorial leert u hoe u de SQL Server GROUPING SETS
kunt gebruiken om meerdere grouping sets te genereren.
Opzetten van een verkoop overzichtstabel
Laten we een nieuwe tabel maken met de naam sales.sales_summary
voor de demonstratie.
Code language: SQL (Structured Query Language) (sql)
In deze query halen we de verkoopbedraggegevens per merk en categorie op en vullen deze in de tabel sales.sales_summary
.
De volgende query retourneert gegevens uit de tabel sales.sales_summary
:
Code language: SQL (Structured Query Language) (sql)

Aan de slag met SQL Server GROUPING SETS
Een groupingset is per definitie een groep kolommen waarmee u kunt groeperen. Doorgaans definieert een enkele query met een aggregaat een enkele groeperingsset.
De volgende query definieert bijvoorbeeld een groeperingsset die merk en categorie omvat, die wordt aangeduid als (brand, category)
. De query retourneert het verkoopbedrag gegroepeerd op merk en categorie:
Code language: SQL (Structured Query Language) (sql)

De volgende query retourneert het verkoopbedrag op merk. Hiermee wordt een groepset gedefinieerd (brand)
:
Code language: SQL (Structured Query Language) (sql)

Met de volgende query wordt het verkoopbedrag per categorie teruggegeven. Hiermee wordt een groepset gedefinieerd (category)
:
Code language: SQL (Structured Query Language) (sql)

De volgende query definieert een lege groepset ()
. Hiermee wordt het verkoopbedrag voor alle merken en categorieën weergegeven.
Code language: SQL (Structured Query Language) (sql)

De vier bovenstaande query’s leveren vier resultaatreeksen op met vier groeperingsreeksen:
Code language: SQL (Structured Query Language) (sql)
Om een gecombineerde resultaatreeks te krijgen met de geaggregeerde gegevens voor alle groeperingsreeksen, kunt u de operator UNION ALL
gebruiken.
Omdat UNION ALL
operator vereist dat alle resultaten set hetzelfde aantal kolommen hebben, moet u NULL
toevoegen aan de select lijst aan de query’s als volgt:
Code language: SQL (Structured Query Language) (sql)

De query genereerde een enkel resultaat met de aggregaten voor alle groepering sets zoals we verwachtten.
De query heeft echter twee grote problemen:
- De query is vrij lang.
- De query is traag omdat SQL Server vier subquery’s moet uitvoeren en de resultatensets tot een enkele moet combineren.
Om deze problemen op te lossen, biedt SQL Server een subclausule van de GROUP BY
-clausule genaamd GROUPING SETS
.
De GROUPING SETS
definieert meerdere groeperingssets in dezelfde query. Het volgende toont de algemene syntaxis van de GROUPING SETS
:
Code language: SQL (Structured Query Language) (sql)
Deze query creëert vier groeperingsreeksen:
Code language: SQL (Structured Query Language) (sql)
U kunt deze GROUPING SETS
gebruiken om de query die de verkoopgegevens krijgt als volgt te herschrijven:
Code language: SQL (Structured Query Language) (sql)
Zoals u kunt zien, levert de query hetzelfde resultaat op als de query die de UNION ALL
operator gebruikt. Deze query is echter veel leesbaarder en natuurlijk efficiënter.
GROUPING-functie
De GROUPING
-functie geeft aan of een opgegeven kolom in een GROUP BY
-clausule is geaggregeerd of niet. De functie geeft 1 weer voor geaggregeerd of 0 voor niet geaggregeerd in de resultaatverzameling.
Zie het volgende queryvoorbeeld:
Code language: SQL (Structured Query Language) (sql)

De waarde in de kolom grouping_brand
geeft aan of de rij is geaggregeerd of niet, 1 betekent dat het verkoopbedrag per merk is geaggregeerd, 0 betekent dat het verkoopbedrag niet per merk is geaggregeerd. Hetzelfde concept wordt toegepast op de grouping_category
-kolom.
In deze tutorial hebt u geleerd hoe u meerdere groeperingsreeksen in een query kunt genereren met behulp van de SQL Server GROUPING SETS
.