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:

  1. De query is vrij lang.
  2. 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.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.