SQL Server GROUPING SETS

Sammanfattning: I den här handledningen lär du dig hur du använder SQL Server GROUPING SETS för att generera flera grupperingsuppsättningar.

Sätt upp en tabell med försäljningsöversikter

Låt oss skapa en ny tabell med namnet sales.sales_summary för demonstrationen.

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

I den här frågan hämtar vi data om försäljningsbelopp per varumärke och kategori och fyller den i tabellen sales.sales_summary.

Följande fråga returnerar data från tabellen sales.sales_summary:

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

Kom igång med SQL Server GRUPPERINGSUPPERSONER

En grupperingsuppsättning är definitionsmässigt en grupp av kolumner genom vilka du grupperar. Vanligtvis definierar en enda fråga med ett aggregat en enda grupperingsuppsättning.

För att ta ett exempel definierar följande fråga en grupperingsuppsättning som inkluderar varumärke och kategori, vilket betecknas som (brand, category). Frågan returnerar försäljningsbeloppet grupperat efter varumärke och kategori:

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

Följande fråga returnerar försäljningsbeloppet efter varumärke. Den definierar en grupperingsuppsättning (brand):

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

Följande fråga returnerar försäljningsbeloppet per kategori. Den definierar en grupperingsuppsättning (category):

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

Följande fråga definierar en tom grupperingsuppsättning (). Den returnerar försäljningsbeloppet för alla varumärken och kategorier.

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

De fyra frågorna ovan returnerar fyra resultatuppsättningar med fyra grupperingsuppsättningar:

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

För att få en enhetlig resultatuppsättning med aggregerade data för alla grupperingsuppsättningar kan du använda operatorn UNION ALL.

Om att UNION ALL-operatorn kräver att alla resultatuppsättningar har samma antal kolumner måste du lägga till NULL i urvalslistan till frågorna så här:

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

Frågan genererade ett enda resultat med de aggregerade uppgifterna för alla grupperingsuppsättningar som vi förväntade oss.

Den har dock två stora problem:

  1. Frågan är ganska lång.
  2. Frågan är långsam eftersom SQL Server måste utföra fyra underfrågor och kombinerar resultatuppsättningarna till en enda.

För att åtgärda dessa problem tillhandahåller SQL Server en underklausul till GROUP BY-klausulen som heter GROUPING SETS.

I GROUPING SETS definieras flera grupperingsuppsättningar i samma fråga. Följande visar den allmänna syntaxen för GROUPING SETS:

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

Denna fråga skapar fyra grupperingsuppsättningar:

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

Du kan använda den här GROUPING SETS för att skriva om frågan som hämtar försäljningsdata på följande sätt:

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

Som du kan se ger frågan samma resultat som den som använder operatorn UNION ALL. Den här frågan är dock mycket mer lättläst och naturligtvis effektivare.

GROUPING-funktion

Funktionen GROUPING anger om en angiven kolumn i en GROUP BY-klausul aggregeras eller inte. Den returnerar 1 för aggregerad eller 0 för ej aggregerad i resultatuppsättningen.

Se följande frågeexempel:

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

Värdet i grouping_brand-kolumnen indikerar att raden är aggregerad eller inte, 1 betyder att försäljningsbeloppet är aggregerat per varumärke, 0 betyder att försäljningsbeloppet inte är aggregerat per varumärke. Samma koncept tillämpas på kolumnen grouping_category.

I den här handledningen har du lärt dig hur man genererar flera grupperingsuppsättningar i en fråga med hjälp av SQL Server GROUPING SETS.

.

Lämna ett svar

Din e-postadress kommer inte publiceras.