SQL Server GROUPING SETS

Sommario: in questo tutorial, imparerete come usare SQL Server GROUPING SETS per generare più set di raggruppamento.

Impostare una tabella di riepilogo delle vendite

Creiamo una nuova tabella chiamata sales.sales_summary per la dimostrazione.

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

In questa query, recuperiamo i dati dell’importo delle vendite per marca e categoria e li inseriamo nella tabella sales.sales_summary.

La seguente query restituisce i dati dalla tabella sales.sales_summary:

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

Inizio con SQL Server GROUPING SETS

Per definizione, un grouping set è un gruppo di colonne per cui si raggruppa. Di solito, una singola query con un aggregato definisce un singolo set di raggruppamento.

Per esempio, la seguente query definisce un set di raggruppamento che include la marca e la categoria che è indicata come (brand, category). La query restituisce l’importo delle vendite raggruppate per marca e categoria:

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

La seguente query restituisce l’importo delle vendite per marca. Definisce un insieme di raggruppamento (brand):

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

La seguente query restituisce l’importo delle vendite per categoria. Definisce un insieme di raggruppamento (category):

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

La seguente query definisce un insieme di raggruppamento vuoto (). Restituisce l’importo delle vendite per tutte le marche e categorie.

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

Le quattro query precedenti restituiscono quattro set di risultati con quattro set di raggruppamento:

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

Per ottenere un set di risultati unificato con i dati aggregati per tutti i set di raggruppamento, è possibile utilizzare l’operatore UNION ALL.

Perché l’operatore UNION ALL richiede che tutti i set di risultati abbiano lo stesso numero di colonne, è necessario aggiungere NULL alla lista di selezione delle query in questo modo:

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

La query ha generato un unico risultato con gli aggregati per tutti i set di raggruppamento come ci aspettavamo.

Tuttavia, ha due problemi principali:

  1. La query è piuttosto lunga.
  2. La query è lenta perché SQL Server deve eseguire quattro sottoquery e combina i set di risultati in uno solo.

Per risolvere questi problemi, SQL Server fornisce una sottoclausola della clausola GROUP BY chiamata GROUPING SETS.

La GROUPING SETS definisce più set di raggruppamento nella stessa query. La seguente mostra la sintassi generale della GROUPING SETS:

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

Questa query crea quattro gruppi di raggruppamento:

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

Puoi usare questa GROUPING SETS per riscrivere la query che ottiene i dati di vendita come segue:

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

Come puoi vedere, la query produce lo stesso risultato di quella che usa l’operatore UNION ALL. Tuttavia, questa query è molto più leggibile e naturalmente più efficiente.

Funzione GROUPING

La funzione GROUPING indica se una colonna specificata in una clausola GROUP BY è aggregata o no. Restituisce 1 per aggregato o 0 per non aggregato nel set di risultati.

Vedi il seguente esempio di query:

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

Il valore nella colonna grouping_brand indica che la riga è aggregata o no, 1 significa che l’importo delle vendite è aggregato per marca, 0 significa che l’importo delle vendite non è aggregato per marca. Lo stesso concetto è applicato alla colonna grouping_category.

In questo tutorial, avete imparato come generare gruppi multipli di raggruppamento in una query utilizzando il SQL Server GROUPING SETS.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.