SQL Server GROUPING SETS

Resumé: I denne vejledning lærer du, hvordan du bruger SQL Server GROUPING SETS til at generere flere grupperingssæt.

Opsætning af en tabel med salgsoversigt

Lad os oprette en ny tabel ved navn sales.sales_summary til demonstrationen.

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

I denne forespørgsel henter vi dataene om salgsbeløb efter mærke og kategori og fylder dem i tabellen sales.sales_summary.

Den følgende forespørgsel returnerer data fra tabellen sales.sales_summary:

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

Kom godt i gang med SQL Server GRUPPERINGSSÆT

Et grupperingssæt er pr. definition en gruppe af kolonner, som du grupperer efter. Typisk definerer en enkelt forespørgsel med et aggregat et enkelt grupperingssæt.

Den følgende forespørgsel definerer f.eks. et grupperingssæt, der omfatter mærke og kategori, som betegnes som (brand, category). Forespørgslen returnerer salgsbeløbet grupperet efter mærke og kategori:

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

Den følgende forespørgsel returnerer salgsbeløbet efter mærke. Den definerer et grupperingssæt (brand):

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

Den følgende forespørgsel returnerer salgsbeløbet efter kategori. Den definerer et grupperingssæt (category):

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

Den følgende forespørgsel definerer et tomt grupperingssæt (). Den returnerer salgsbeløbet for alle mærker og kategorier.

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

De fire forespørgsler ovenfor returnerer fire resultatsæt med fire grupperingssæt:

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

For at få et samlet resultatsæt med de aggregerede data for alle grupperingssæt kan du bruge operatoren UNION ALL.

Da UNION ALL-operatoren kræver, at alle resultatsæt har det samme antal kolonner, skal du tilføje NULL til select-listen til forespørgslerne på denne måde:

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

Spørgsmålet genererede et enkelt resultat med aggregaterne for alle grupperingssæt, som vi forventede.

Den har dog to store problemer:

  1. Forsøgningen er ret langvarig.
  2. Forsøgningen er langsom, fordi SQL Server skal udføre fire underforespørgsler og kombinerer resultatsættene til et enkelt.

For at løse disse problemer leverer SQL Server en underklausul til GROUP BY-klausulen kaldet GROUPING SETS.

Den GROUPING SETS definerer flere grupperingssæt i den samme forespørgsel. Følgende viser den generelle syntaks for GROUPING SETS:

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

Denne forespørgsel opretter fire grupperingssæt:

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

Du kan bruge denne GROUPING SETS til at omskrive forespørgslen, der henter salgsdataene, på følgende måde:

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

Som du kan se, giver forespørgslen det samme resultat som den, der bruger UNION ALL-operatoren. Denne forespørgsel er dog meget mere læsevenlig og naturligvis mere effektiv.

GROUPING-funktion

Funktionen GROUPING angiver, om en angivet kolonne i en GROUP BY-klausul aggregeres eller ej. Den returnerer 1 for aggregeret eller 0 for ikke aggregeret i resultatmængden.

Se følgende forespørgselseksempel:

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

Værdien i grouping_brand-kolonnen angiver, at rækken er aggregeret eller ej. 1 betyder, at salgsbeløbet er aggregeret efter mærke, 0 betyder, at salgsbeløbet ikke er aggregeret efter mærke. Det samme koncept anvendes på grouping_category-kolonnen.

I denne vejledning har du lært, hvordan du kan generere flere grupperingssæt i en forespørgsel ved hjælp af SQL Server GROUPING SETS.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.