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:
- Dotaz je poměrně dlouhý.
- 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.
.




