Operátory ROLLUP a CUBE

Podobné dokumenty
Dotazovací jazyky I. Datová krychle. Soběslav Benda

DATA CUBE. Mgr. Jiří Helmich

Data Cube. Luboš Kulič Tomáš Kuthan

Analýza a modelování dat. Přednáška 8

KIV/ZIS cvičení 5. Tomáš Potužák

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Databáze SQL SELECT. David Hoksza

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Databáze I. Přednáška 6

Databázové systémy. Cvičení 6: SQL

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Analýza a modelování dat. Přednáška 9

Databázové systémy I

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Materializované pohledy

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Úvod do databázových systémů

ÚVOD DO DATABÁZÍ. Metodické listy pro předmět

6. blok část C Množinové operátory

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Základní informace o co se jedná a k čemu to slouží

Ukládání a vyhledávání XML dat

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

KIV/ZIS cvičení 6. Tomáš Potužák

6. blok část B Vnořené dotazy

Úvod do databázových systémů

Distanční opora předmětu: Databázové systémy Tématický blok č. 3: OLAP, operátory CUBE a ROLLUP Autor: RNDr. Jan Lánský, Ph.D.

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Dotazování v relačním modelu a SQL

Databázové systémy a SQL

Analýza a modelování dat 3. přednáška. Helena Palovská

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Multi-dimensional expressions

Jazyk SQL databáze SQLite. připravil ing. petr polách

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Databáze I. 5. přednáška. Helena Palovská

Databáze I. 1. přednáška. Helena Palovská

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Databázové systémy a SQL

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

5. POČÍTAČOVÉ CVIČENÍ

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

Dotazy tvorba nových polí (vypočítané pole)

KIV/ZIS - SELECT, opakování

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Tiskové sestavy. Zdroj záznamu pro tiskovou sestavu. Průvodce sestavou. Použití databází

PG 9.5 novinky ve vývoji aplikací

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Použití databází na Webu

8.2 Používání a tvorba databází

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

5. blok Souhrnné a skupinové dotazy

DUM 12 téma: Příkazy pro tvorbu databáze

Úvod do databázových systémů

Databázové systémy Cvičení 5

Úvod do databázových systémů 3. cvičení

SQL - trigger, Databázové modelování

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Základní přehled SQL příkazů

Databáze. Logický model DB. David Hoksza

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Virtual Private Database (VPD) Jaroslav Kotrč

Kontingenční tabulky v MS Excel 2010

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy Tomáš Skopal

MS Access Dotazy SQL

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Informační systémy ve zdravotnictví. 6. cvičení

Databázové systémy Cvičení 5.3

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Databázové systémy trocha teorie

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Databáze v MS ACCESS

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Úvod do databázových systémů

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

- sloupcové integritní omezení

Dotaz se souhrny a dotaz křížový

Marketingová komunikace. 3. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK3PH (vm3bph)

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Databáze II. 1. přednáška. Helena Palovská

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

Informační systémy ve zdravotnictví. 10. cvičení

kapitola 2 Datové sklady, OLAP

Michal Krátký, Miroslav Beneš

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Informační systémy ve zdravotnictví. 8. cvičení

Vkládání, aktualizace, mazání

Databázové a informační systémy Jana Šarmanová

On line analytical processing (OLAP) databáze v praxi

Transkript:

Operátory ROLLUP a CUBE Dotazovací jazyky, 2009 Marek Polák Martin Chytil

Osnova přednášky o Analýza dat o Agregační funkce o GROUP BY a jeho problémy o Speciální hodnotový typ ALL o Operátor CUBE o Operátor ROLLUP o Hodnota NULL a funkce GROUPING o Výpočet dotazů s ROLLUP a CUBE 2

Motivace (1) o V současnosti jsou nejběžnější relační databáze o Subjekty uložené v databázi mají velké množství parametrů (vlastností). o Příklad o Zboží název, cena, kategorie o Zákazník jméno, adresa, email, telefonní číslo 3

Motivace (2) o Potřeba dotazovat se z mnoha pohledů na mnoho parametrů a jejich kombinace. o Různé typy dotazů o Na konkrétní záznam - objednávka zákazníka X - zajímá prodavače o Agregovaná data - celková cena všech objednávek zákazníků X a Y za poslední rok - hlavně pro manažery 4

Motivace (3) o Kolik utratil každý zákazník v každém měsíci za zboží z každé skupiny? o Kolik celkem v každé skupině? o Kolik celkem v každém měsíci? o Kolik celkem utratil každý zákazník? o Kolik utratili všichni dohromady? o trochu jiný dotaz o Kolik kdy utratil zákazník Franta Vopršálek za elektroniku? 5

Datová analýza o Formulace dotazu o Získání agregovaných dat o Vizualizace výsledků o Histogramy, křížové tabulky, částečné součty o Analýza výsledků 6

Histogramy (1) o Jeden ze způsobů zobrazení dat o Agregace přes počítané kategorie o Počasí(Čas, Zem. Šířka, Zem. Výška, Teplota) o Chceme: Pro každé území maximální denní teplotu. 7

Histogramy (2) o SELECT den, území, MAX(teplota) FROM Počasí GROUP BY Den(Čas) AS den, Území(šířka, výška) AS území o SQL neumožňuje přímo - nutné používat hnízděné dotazy o SELECT den, území, MAX(teplota) FROM ( SELECT Den(čas) AS den, Území(šířka, výška) AS území, teplota FROM Počasí) AS T GROUP BY den, území 8

Operátor GROUP BY - opakování o Standardní SQL příkaz pro možnost dotazování se po agregacích o Umožňuje seskupit řádky podle zvolených sloupců do agregací superřádků o Na takto seskupená data (superřádky) je možno aplikovat různé agregační funkce 9

Operátor GROUP BY - syntaxe o SELECT {<sloupec> <výraz>, } FROM <zdroj dat> WHERE <podmínka> GROUP BY {<jméno sloupce> [zvláštní podmínka], } 10

Agregační funkce o Standardní agregační funkce: o COUNT() o MIN() o MAX() o SUM() o AVG() o Doménově specifické o Vlastní 11

Použitá data v příkladech o Tabulka produkce automobilů typ rok_vyroby barva pocet 1 Octavia 2000 stribrna 146 2 Octavia 2005 stribrna 300 3 Octavia 2007 bila 209 4 Superb 2008 vinova 502 5 Superb 2009 stribrna 450 6 Octavia 2000 bila 100 7 Octavia 2005 bila 135 8 Octavia 2007 stribrna 650 12

Dotaz pomocí GROUP BY SELECT typ, rok_vyroby, barva, sum(pocet) AS pocet FROM auta WHERE typ='octavia' GROUP BY typ, rok_vyroby, barva typ rok_vyroby barva pocet 1 Octavia 2000 bila 100 2 Octavia 2005 bila 135 3 Octavia 2007 bila 209 4 Octavia 2000 stribrna 146 5 Octavia 2005 stribrna 300 6 Octavia 2007 stribrna 650 13

Dotaz pomocí GROUP BY o Problém o Agregaci lze použít pouze pro jednu dimenzi o Z předešlého dotazu už například nezjistíme, kolik se vyrobilo Octavií v roce 2000. o Řešením může být použití příkazu UNION pro každou požadovanou dimenzi 14

Hodnotový typ ALL o Speciální hodnotový typ o Použití společně s agregačními funkcemi o Z příslušného sloupce vybere všechny řádky o Sloupec není zahrnut v příkazu GROUP BY 15

Dotaz pomocí spojení více dotazů SELECT 'ALL', 'ALL', 'ALL', SUM(pocet) FROM auta WHERE typ='octavia' UNION SELECT typ, 'ALL', 'ALL', SUM(pocet) FROM auta WHERE typ='octavia' GROUP BY typ UNION SELECT typ, rok_vyroby, 'ALL', SUM(pocet) FROM auta WHERE typ='octavia' GROUP BY typ, rok_vyroby UNION SELECT typ, rok_vyroby, barva, SUM(pocet) FROM auta WHERE typ='octavia' GROUP BY typ, rok_vyroby,barva UNION SELECT typ, 'ALL', barva, SUM(pocet) FROM auta WHERE typ='octavia' GROUP BY typ, barva UNION SELECT 'ALL', rok_vyroby, 'ALL', SUM(pocet) FROM auta WHERE typ='octavia' GROUP BY rok_vyroby UNION SELECT 'ALL', 'ALL', barva, SUM(pocet) FROM auta WHERE typ='octavia' GROUP BY barva UNION SELECT 'ALL', rok_vyroby, barva, SUM(pocet) FROM auta WHERE typ='octavia' GROUP BY rok_vyroby, barva 16

Výsledek krátkého dotazu typ rok_vyroby barva pocet 1 ALL 2000 ALL 246 2 ALL 2000 bila 100 3 ALL 2000 stribrna 146 4 ALL 2005 ALL 435 5 ALL 2005 bila 135 6 ALL 2005 stribrna 300 7 ALL 2007 ALL 859 8 ALL 2007 bila 209 9 ALL 2007 stribrna 650 10 ALL ALL ALL 1540 11 ALL ALL bila 444 12 ALL ALL stribrna 1096 13 Octavia 2000 ALL 246 14 Octavia 2000 bila 100 15 Octavia 2000 stribrna 146 16 Octavia 2005 ALL 435 17 Octavia 2005 bila 135 18 Octavia 2005 stribrna 300 19 Octavia 2007 ALL 859 20 Octavia 2007 bila 209 21 Octavia 2007 stribrna 650 22 Octavia ALL ALL 1540 23 Octavia ALL bila 444 17 24 Octavia ALL stribrna 1096

Nevýhody GROUP BY spolu s UNION o Pokud má tabulka například 6 sloupců a přes agregaci chceme provést přes všechny (6D křížová tabulka), je potřeba již 64 GROUP BY a 64 sjednocení!!! o Výpočetně náročné o Prochází data pro každý poddotaz znovu, výsledek nutné setřídit o Použitelné pouze pro malé tabulky o Řešení použití operátoru CUBE 18

ROLLUP, DRILLDOWN o Základní techniky pohybu pro více atributů (dimenzí) v agregacích o ROLLUP o směr nahoru zobecňování dotazu o DRILLDOWN o směr dolu - upřesňovaní dotazu 19

Operátor CUBE o Umožňuje použít agregační funkce pro více dimenzí současně o Tzv. Data Cube datová krychle o Agregace je použita pro veškeré sloupce zahrnuté v GROUP BY 20

Datová krychle - ilustrace Agregační funkce Datová krychle a agregované podprostory SUM() GROUP BY Křížová tabulka SUM() SUM() 21

Velikost datové kostky (1) o Operátor CUBE agreguje přes všechny uvedené atributy. o Pokud je atributů N, pak přibude 2 N - 1 superagregovaných hodnot. 22

Velikost datové kostky (2) o Bez znalostí dat nelze přesná velikost kostky určit pouze horní odhad o Pokud je kardinalita na N atributech C 1, C 2, C N, pak kardinalita výsledné kostky je (C i + 1). o Tedy pokud máme například tabulku 1 x 3 x 2, potom operátor CUBE zobrazí 2 x 4 x 3 řádků vždy se přičte jedna za hodnotu ALL. 23

Operátor CUBE - syntaxe o GROUP BY <seznam sloupců> WITH CUBE o MS SQL Server do verze 2005 o GROUP BY CUBE(<seznam sloupců>) o Dle standardu SQL 1999 o Oracle o IBM DB2 o MS SQL Server 2008 24

Příklad použití CUBE SELECT typ, rok_vyroby, barva, SUM(pocet) AS pocet FROM auta WHERE typ='octavia' GROUP BY typ, rok_vyroby, barva WITH CUBE 25 typ rok_vyroby barva pocet 1 ALL 2000 ALL 246 2 ALL 2000 bila 100 3 ALL 2000 stribrna 146 4 ALL 2005 ALL 435 5 ALL 2005 bila 135 6 ALL 2005 stribrna 300 7 ALL 2007 ALL 859 8 ALL 2007 bila 209 9 ALL 2007 stribrna 650 10 ALL ALL ALL 1540 11 ALL ALL bila 444 12 ALL ALL stribrna 1096 13 Octavia 2000 ALL 246 14 Octavia 2000 bila 100 15 Octavia 2000 stribrna 146 16 Octavia 2005 ALL 435 17 Octavia 2005 bila 135 18 Octavia 2005 stribrna 300 19 Octavia 2007 ALL 859 20 Octavia 2007 bila 209 21 Octavia 2007 stribrna 650 22 Octavia ALL ALL 1540 23 Octavia ALL bila 444 24 Octavia ALL stribrna 1096

GROUP BY vs. CUBE SELECT typ, rok_vyroby, barva, SUM(pocet) as pocet FROM auta WHERE typ='octavia' GROUP BY typ, barva, rok_vyroby typ rok_vyroby barva pocet 1 Octavia 2000 bila 100 2 Octavia 2005 bila 135 3 Octavia 2007 bila 209 4 Octavia 2000 stribrna 146 SELECT typ, rok_vyroby, barva, SUM(pocet) as pocet FROM auta WHERE typ='octavia' GROUP BY typ, barva, rok_vyroby WITH CUBE 5 Octavia 2005 stribrna 300 6 Octavia 2007 stribrna 650 26 typ rok_vyroby barva pocet 1 ALL 2000 ALL 246 2 ALL 2000 bila 100 3 ALL 2000 stribrna 146 4 ALL 2005 ALL 435 5 ALL 2005 bila 135 6 ALL 2005 stribrna 300 7 ALL 2007 ALL 859 8 ALL 2007 bila 209 9 ALL 2007 stribrna 650 10 ALL ALL ALL 1540 11 ALL ALL bila 444 12 ALL ALL stribrna 1096 13 Octavia 2000 ALL 246 14 Octavia 2000 bila 100 15 Octavia 2000 stribrna 146 16 Octavia 2005 ALL 435 17 Octavia 2005 bila 135 18 Octavia 2005 stribrna 300 19 Octavia 2007 ALL 859 20 Octavia 2007 bila 209 21 Octavia 2007 stribrna 650 22 Octavia ALL ALL 1540 23 Octavia ALL bila 444 24 Octavia ALL stribrna 1096

Efektivita operátoru CUBE o Příklad doby výpočtu při použití spojení dotazů pomocí UNION a při použití příkazu CUBE. o Použit byl předchozí příklad. Testováno na MS SQL Serveru 2005. Při použití UNION Při použití CUBE Doba výpočtu: 0,100272 s Doba výpočtu: 0,0508809 s dvakrát rychlejší! 27

Operátor ROLLUP o Někdy není potřeba vytvářet celou datovou krychli o Taková data nepotřebujeme získat. o Zbytečně výpočetně náročné. o Operátor přidává řádek ALL ke všem sloupcům v seznamu za GROUP BY. o Přidává hierarchicky záleží na pořadí parametrů. 28

Operátor ROLLUP - syntaxe o GROUP BY <seznam sloupců> WITH ROLLUP o MS SQL Server do verze 2005 o GROUP BY ROLLUP(<seznam sloupců>) o Dle standardu SQL 1999 o Oracle o IBM DB2 o MS SQL Server 2008 29

Dotaz s příkazem ROLLUP SELECT typ, rok_vyroby, barva, sum(pocet) AS pocet FROM auta GROUP BY typ, rok_vyroby, barva WITH ROLLUP typ rok_vyroby barva počet 1 Octavia 2000 bila 100 2 Octavia 2000 stribrna 146 3 Octavia 2000 ALL 246 4 Octavia 2005 bila 135 5 Octavia 2005 stribrna 300 6 Octavia 2005 ALL 435 7 Octavia 2007 bila 209 8 Octavia 2007 stribrna 650 9 Octavia 2007 ALL 859 10 Octavia ALL ALL 1540 11 Superb 2008 vinova 502 12 Superb 2008 ALL 502 13 Superb 2009 stribrna 450 14 Superb 2009 ALL 450 15 Superb ALL ALL 952 16 ALL ALL ALL 2492 30

Pořadí parametrů při použití ROLLUP SELECT typ, rok_vyroby, barva, SUM(pocet) AS pocet FROM auta WHERE typ='octavia' GROUP BY typ, rok_vyroby, barva WITH ROLLUP SELECT typ, rok_vyroby, barva, SUM(pocet) AS pocet FROM auta WHERE typ='octavia' GROUP BY typ, barva, rok_vyroby WITH ROLLUP 31 typ rok_vyroby barva pocet 1 Octavia 2000 bila 100 2 Octavia 2000 stribrna 146 3 Octavia 2000 ALL 246 4 Octavia 2005 bila 135 5 Octavia 2005 stribrna 300 6 Octavia 2005 ALL 435 7 Octavia 2007 bila 209 8 Octavia 2007 stribrna 650 9 Octavia 2007 ALL 859 10 Octavia ALL ALL 1540 11 ALL ALL ALL 1540 typ rok_vyroby barva pocet 1 Octavia 2000 bila 100 2 Octavia 2005 bila 135 3 Octavia 2007 bila 209 4 Octavia ALL bila 444 5 Octavia 2000 stribrna 146 6 Octavia 2005 stribrna 300 7 Octavia 2007 stribrna 650 8 Octavia ALL stribrna 1096 9 Octavia ALL ALL 1540 10 ALL ALL ALL 1540

GROUP BY vs. ROLLUP SELECT typ, rok_vyroby, barva, SUM(pocet) AS pocet FROM auta WHERE typ='octavia' GROUP BY typ, barva, rok_vyroby typ rok_vyroby barva pocet 1 Octavia 2000 bila 100 2 Octavia 2005 bila 135 3 Octavia 2007 bila 209 4 Octavia 2000 stribrna 146 5 Octavia 2005 stribrna 300 6 Octavia 2007 stribrna 650 typ rok_vyroby barva pocet SELECT typ, rok_vyroby, barva, SUM(pocet) AS pocet FROM auta WHERE typ='octavia' GROUP BY typ, barva, rok_vyroby WITH ROLLUP 1 Octavia 2000 bila 100 2 Octavia 2000 stribrna 146 3 Octavia 2000 ALL 246 4 Octavia 2005 bila 135 5 Octavia 2005 stribrna 300 6 Octavia 2005 ALL 435 7 Octavia 2007 bila 209 8 Octavia 2007 stribrna 650 9 Octavia 2007 ALL 859 10 Octavia ALL ALL 1540 11 ALL ALL ALL 1540 32

GROUP BY, ROLLUP, CUBE typ rok_vyroby barva pocet 1 Octavia 2000 bila 100 2 Octavia 2005 bila 135 3 Octavia 2007 bila 209 4 Octavia 2000 stribrna 146 5 Octavia 2005 stribrna 300 6 Octavia 2007 stribrna 650 typ rok_vyroby barva pocet 1 Octavia 2000 bila 100 2 Octavia 2000 stribrna 146 3 Octavia 2000 ALL 246 4 Octavia 2005 bila 135 5 Octavia 2005 stribrna 300 6 Octavia 2005 ALL 435 7 Octavia 2007 bila 209 8 Octavia 2007 stribrna 650 9 Octavia 2007 ALL 859 10 Octavia ALL ALL 1540 11 ALL ALL ALL 1540 33 typ rok_vyroby barva pocet 1 ALL 2000 ALL 246 2 ALL 2000 bila 100 3 ALL 2000 stribrna 146 4 ALL 2005 ALL 435 5 ALL 2005 bila 135 6 ALL 2005 stribrna 300 7 ALL 2007 ALL 859 8 ALL 2007 bila 209 9 ALL 2007 stribrna 650 10 ALL ALL ALL 1540 11 ALL ALL bila 444 12 ALL ALL stribrna 1096 13 Octavia 2000 ALL 246 14 Octavia 2000 bila 100 15 Octavia 2000 stribrna 146 16 Octavia 2005 ALL 435 17 Octavia 2005 bila 135 18 Octavia 2005 stribrna 300 19 Octavia 2007 ALL 859 20 Octavia 2007 bila 209 21 Octavia 2007 stribrna 650 22 Octavia ALL ALL 1540 23 Octavia ALL bila 444 24 Octavia ALL stribrna 1096

ROLLUP vs. CUBE - přehled ROLLUP o Přidává nový řádek pro každý sloupec zahrnutý v sekci GROUP BY o Záleží na pořadí jednotlivých parametrů v sekci GROUP BY CUBE o Vytvoří všechny možné kombinace pro sloupce zahrnuté v sekci GROUP BY o Nezáleží na pořadí jednotlivých parametrů v sekci GROUP BY 34

Algebra GROUP BY, CUBE, ROLLUP o CUBE(ROLLUP) = CUBE o CUBE(GROUP BY) = CUBE o ROLLUP(GROUP BY) = ROLLUP o GROUP BY <sloupce> ROLLUP <sloupce> CUBE <sloupce> 35

Rozšíření syntaxe GROUP BY o GROUP BY <sloupce> [ ROLLUP <sloupce> ] [ CUBE <sloupce> ] <sloupce> ::= { ( <sloupec> <výraz> ) [ AS <alias> ] [ <splňující podmínka> ] } 36

Hodnota ALL o Jak reprezentovat? o Návrh: množina o Potřeba funkce ALL() vracející celou množinu hodnot o Problémy: o Nové klíčové slovo o Možnost přidat ALL [NOT] ALLOWED do definice sloupců a systémového katalogu o Přetížení operátorů =, IN, o a mnoho dalších 37

Funkce GROUPING o Operátor CUBE vrací v agregovaných sloupcích speciální hodnotu NULL místo ALL. o Má jiný význam, než běžný NULL jak rozlišit? o Syntaxe funkce: GROUPING(jmeno_sloupce) o Návratové hodnoty o 1pokud je hodnota NULL vytvořena agregací o 0 pokud je hodnota datová nebo se jedná o implicitní NULL 38

Funkce GROUPING příklad použití SELECT CASE WHEN GROUPING(typ) = 1 THEN 'vše' ELSE typ END AS typ, CASE WHEN GROUPING(rok_vyroby) = 1 THEN 'vše' ELSE rok_vyroby END AS rok_vyroby, CASE WHEN GROUPING(barva) = 1 THEN 'vše' ELSE barva END AS barva, SUM(pocet) AS pocet FROM auta WHERE typ='octavia' GROUP BY typ, rok_vyroby, barva WITH CUBE 39

Funkce GROUPING výsledek typ rok_vyroby barva pocet 1 vše 2000 vše 246 2 vše 2000 bila 100 3 vše 2000 stribrna 146 4 vše 2005 vše 435 5 vše 2005 bila 135 6 vše 2005 stribrna 300 7 vše 2007 vše 859 8 vše 2007 bila 209 9 vše 2007 stribrna 650 10 vše vše vše 1540 11 vše vše bila 444 12 vše vše stribrna 1096 13 Octavia 2000 vše 246 14 Octavia 2000 bila 100 15 Octavia 2000 stribrna 146 16 Octavia 2005 vše 435 17 Octavia 2005 bila 135 18 Octavia 2005 stribrna 300 19 Octavia 2007 vše 859 20 Octavia 2007 bila 209 21 Octavia 2007 stribrna 650 22 Octavia vše vše 1540 23 Octavia vše bila 444 40 24 Octavia vše stribrna 1096

CUBE a ROLLUP pod pokličkou o ROLLUP o Setřídění podle sdružovaných atributů o Výpočet agregačních funkcí o CUBE o Naivně: sjednocení ROLLUP výsledků 41

Techniky výpočtu agregačních funkcí o Výpočet na co nejnižší systémové úrovni o Použití polí nebo hašování k organizaci agregovaných sloupců v paměti o Mapování dlouhých řetězců do menších typů o Organizace velkých dat o Třídění nebo hybridní hašování o Sekvenční průchod o Paralelní zpracování roztroušených dat 42

Rozdělení agregačních funkcí o Distributivní o COUNT, MIN, MAX, SUM o Algebraické o Průměr, směrodatná odchylka o Celostní - holistické o Medián, modus 43

Udržování krychlí o Potřeba dynamicky měnit hotovou krychli udržovat o Udržování kostky je jiné než její vytváření o Př. Funkce MAX() o SELECT o Funkce je distributivní o INSERT o Projdu jen pár řádků o DELETE o Musím projít všechno o MAX() je na operaci DELETE holistická 44

Udržování krychlí - výsledky o Algebraické funkce na INSERT, UPDATE, DELETE o Lze udržovat jednoduše o Distributivní funkce na INSERT, UPDATE, DELETE o Složitější, ale ne nemožné o Holistické funkce o Zpravidla pouze na operaci DELETE o Velmi obtížné 45

ROLLUP, CUBE a podpora SŘBD o Podporují o MS SQL Server o Oracle o DB2 o Nepodporují o Postgres SQL o MySQL 46

Závěr o Operátory CUBE a ROLLUP o Umožňují pracovat s více agregacemi najednou o Zjednodušují zápis dotazů o Použití při dotazování nad velkými daty o Umožňuje vytvářet dotazy přes více dimenzí GROUP BY umožňuje dotaz maximálně přes jednu dimenzi. 47

Použité zdroje o http://paul.rutgers.edu/~aminabdu/cs541/cube_op.pdf o http://technet.microsoft.com o http://www.dba-oracle.com/ o http://chiragrdarji.wordpress.com/2008/09/09/group-by-cuberollup-and-sql-server-2005/ 48

prostor pro dotazy 49

Jaké jsou 2 hlavní rozdíly mezi operátory ROLLUP a CUBE? 50

K čemu slouží funkce GROUPING? 51

K čemu se používají techniky ROLLUP a DRILLDOWN? 52