SUPINOVÉ SESTAVY SQL Serveru

Shrnutí: v tomto kurzu se naučíte, jak pomocí SQL Serveru GROUPING SETS vytvořit více skupinových sad.

Nastavení souhrnné tabulky prodeje

Pro ukázku vytvoříme novou tabulku s názvem sales.sales_summary.

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

V tomto dotazu získáme údaje o výši prodeje podle značky a kategorie a naplníme je do tabulky sales.sales_summary.

Následující dotaz vrátí data z tabulky sales.sales_summary:

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

Začínáme se skupinovacími sadami SQL Serveru

Podle definice je skupinovací sada skupina sloupců, podle kterých se seskupuje. Obvykle jeden dotaz s agregací definuje jednu seskupovací sadu.

Například následující dotaz definuje seskupovací sadu, která zahrnuje značku a kategorii, která je označena jako (brand, category). Dotaz vrátí částku prodeje seskupenou podle značky a kategorie:

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

Následující dotaz vrátí částku prodeje podle značky. Definuje seskupovací množinu (brand):

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

Následující dotaz vrací částku prodeje podle kategorie. Definuje seskupovací množinu (category):

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

Následující dotaz definuje prázdnou seskupovací množinu (). Vrací výši prodeje pro všechny značky a kategorie:

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

Čtyři výše uvedené dotazy vracejí čtyři množiny výsledků se čtyřmi seskupovacími množinami:

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

Chcete-li získat jednotnou množinu výsledků s agregovanými daty pro všechny seskupovací množiny, můžete použít operátor UNION ALL.

Protože operátor UNION ALL vyžaduje, aby všechny výsledkové sady měly stejný počet sloupců, musíte do seznamu select k dotazům přidat NULL takto:

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

Dotaz vygeneroval jednotný výsledek s agregovanými údaji pro všechny seskupovací sady, jak jsme očekávali.

Má však dva zásadní problémy:

  1. Dotaz je poměrně dlouhý.
  2. Dotaz je pomalý, protože SQL Server musí provést čtyři poddotazy a spojí výsledné množiny do jedné.

Pro odstranění těchto problémů poskytuje SQL Server podvětu klauzule GROUP BY nazvanou GROUPING SETS.

Klauzule GROUPING SETS definuje více seskupovacích sad v jednom dotazu. Následující příklad ukazuje obecnou syntaxi GROUPING SETS:

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

Tento dotaz vytvoří čtyři seskupovací množiny:

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

Tento GROUPING SETS můžete použít k přepsání dotazu, který získá údaje o prodeji, takto:

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

Jak vidíte, dotaz dává stejný výsledek jako dotaz, který používá operátor UNION ALL. Tento dotaz je však mnohem čitelnější a samozřejmě efektivnější.

Funkce GROUPING

Funkce GROUPING udává, zda je zadaný sloupec v klauzuli GROUP BY agregován, nebo ne. Vrací 1 pro agregované nebo 0 pro neagregované v souboru výsledků.

Podívejte se na následující příklad dotazu:

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

Hodnota ve sloupci grouping_brand udává, zda je řádek agregovaný nebo ne, 1 znamená, že částka prodeje je agregovaná podle značky, 0 znamená, že částka prodeje není agregovaná podle značky. Stejný koncept je aplikován na sloupec grouping_category.

V tomto tutoriálu jste se naučili, jak v dotazu vytvořit více seskupovacích sad pomocí SQL Serveru GROUPING SETS.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.