Rozszerzenia grupowania

Podobne dokumenty
OLAP i hurtownie danych c.d.

SQL do zaawansowanych analiz danych część 1.

Microsoft SQL Server Podstawy T-SQL

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

188 Funkcje analityczne

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Bazy danych - Materiały do laboratoriów IV

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Grupowanie danych klauzula GROUP BY

Ćwiczenie 3. Funkcje analityczne

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Klasyczna Analiza Danych

Wykład 6. SQL praca z tabelami 3

Plan. Wyświetlanie n początkowych wartości (TOP n) Użycie funkcji agregujących. Grupowanie danych - klauzula GROUP BY

select zam_id, cena_euro,(rank() over (partition by zam_id order by cena_euro)) from pozycjezamowien order by zam_id

Wykład 8. SQL praca z tabelami 5

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

ORACLE. System Zarządzania Bazą Danych Oracle. Oracle Advanced SQL

Wykład 05 Bazy danych

Relacyjne bazy danych. Podstawy SQL

Przestrzenne bazy danych Podstawy języka SQL

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Systemy OLAP I. Krzysztof Dembczyński. Instytut Informatyki Zakład Inteligentnych Systemów Wspomagania Decyzji Politechnika Poznańska

SQL do zaawansowanych analiz danych część 1.

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Autor: Joanna Karwowska

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

SQL (ang. Structured Query Language)

Grupowanie i funkcje agregujące

Grupowanie i funkcje agregacji

T-SQL w Microsoft SQL Server 2014 i SQL Server 2012

Tworzenie zapytań do Microsoft SQL Server

Relacyjne bazy danych. Podstawy SQL

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Bazy danych 8. Podzapytania i grupowanie. P. F. Góra

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Optymalizacja. Plan wykonania polecenia SQL (1) Plan wykonania polecenia SQL (2) Rozdział 19 Wprowadzenie do optymalizacji poleceń SQL

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Szkolenie autoryzowane. MS Tworzenie zapytań do Microsoft SQL Server Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Wykład 5. SQL praca z tabelami 2

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Konstruowanie Baz Danych DQL agregacja danych

Systemy OLAP I. Krzysztof Dembczyński. Instytut Informatyki Zakład Inteligentnych Systemów Wspomagania Decyzji Politechnika Poznańska

Agregacja i Grupowanie Danych. Funkcje Agregacji. Opcje GROUP BY oraz HAVING

Laboratorium Bazy danych SQL 2

Systemy GIS Tworzenie zapytań w bazach danych

Wprowadzenie do języka SQL

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Podstawowe zapytania SELECT (na jednej tabeli)

Bazy danych 2. Wykład 4 Structured Query Language (SQL)

Widok Connections po utworzeniu połączenia. Obszar roboczy

Oracle PL/SQL. Paweł Rajba.

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

Paweł Rajba

Operacja PIVOT w języku SQL w środowisku Oracle

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

ORACLE. System Zarządzania Bazą Danych Oracle. Oracle Advanced SQL

Bazy Danych II. Ćwiczenia

Hurtownie danych. Projektowanie hurtowni: modele wielowymiarowe. Modelowanie punktowe. Operacje OLAP na kostkach.

Bloki anonimowe w PL/SQL

Oracle PL/SQL. Paweł Rajba.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ćwiczenia z Zaawansowanych Systemów Baz Danych

Bazy danych. dr inż. Arkadiusz Mirakowski

Język SQL. Rozdział 2. Proste zapytania

Optymalizacja poleceń SQL Wprowadzenie

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Microsoft Excel 2013: Budowanie modeli danych przy użyciu PowerPivot

Oracle11g: Wprowadzenie do SQL

SQL praca z tabelami 4. Wykład 7

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Fazy przetwarzania polecenia SQL. Faza parsingu (2) Faza parsingu (1) Optymalizacja poleceń SQL Część 1.

Modele danych - wykład V. Zagadnienia. 1. Wprowadzenie 2. MOLAP modele danych 3. ROLAP modele danych 4. Podsumowanie 5. Zadanie fajne WPROWADZENIE

Bazy danych 6. Klucze obce. P. F. Góra

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

1.5.3 Do czego słuŝą tymczasowe przestrzenie Zarządzanie plikami danych

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Bazy danych 7. SQL podstawy

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Optymalizacja poleceń SQL Metody dostępu do danych

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

PODZAPYTANIE (SUBSELECT)

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Wstęp do Business Intelligence

Bazy danych 10. SQL Widoki

Modelowanie wymiarów

PODSTAWY BAZ DANYCH 13. PL/SQL

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Optymalizacja poleceń SQL

Transkrypt:

Rozszerzenia grupowania 226

Plan rozdziału 227 Wprowadzenie ROLLUP CUBE GROUPING SETS GROUPING

Rozszerzenia grupowania danych 228 W złożonych magazynach danych oprócz tabel faktów i wymiarów istnieje dodatkowo wiele perspektyw materializowanych mających na celu zwiększenie wydajności systemu W większości przypadków przechowują one dane zagregowane, każda na innym poziomie, przy wykorzystaniu grupowania w oparciu o różne zbiory atrybutów Odświeżanie takie zestawu perspektyw materializowanych jest poważnym obciążeniem dla systemu Pomocą mogą w tym służyć rozszerzenia grupowania danych, dzięki którym jedno zapytanie może wyznaczać wiele zbiorów agregacji na różnych poziomach grupowania Rozszerzenia te stanowią rozbudowę klauzuli GROUP BY

ROLLUP 229 Polecenie ROLLUP jest rozszerzeniem klauzuli GROUP BY, które pozwala wyliczać dodatkowe podsumowania częściowe i ogólne. Polecenie ROLLUP służy do konstruowania pół-kostek danych. ROLLUP jest wyrażeniem wyjątkowo wydajnym. Dla n kolumn grupujących ROLLUP tworzy n + 1 podsumowań. Dodatkowe podsumowania wyznaczone przez ROLLUP wyliczane są przez eliminowanie kolejno kolumn grupujących począwszy od ostatniej a skończywszy na pierwszej Przykładowo klauzula GROUP BY ROLLUP(kontynent, kraj, miejscowość, dzielnica) Wyznaczy następujące podsumowania GROUP BY kontynent, kraj, miejscowość, dzielnica GROUP BY kontynent, kraj, miejscowość GROUP BY kontynent, kraj GROUP BY kontynent bez GROUP BY podsumowanie całkowite

Przykład użycia ROLLUP 230 SELECT nr_konta, typ, kategoria, sum(kwota) GROUP BY nr_konta, typ, kategoria SELECT nr_konta, typ, kategoria, sum(kwota) GROUP BY rollup(nr_konta, typ, kategoria); NR_KONTA TYP KATEGORIA SUM(KWOTA) ------------- ---------- -------------------- ---------- 11-11111111 WPŁATA PENSJA 8150 11-11111111 WPŁATA UMOWA O DZIEŁO 1650 11-11111111 WPŁATA 9800 11-11111111 WYPŁATA RACHUNEK ZA PRĄD -720,5 11-11111111 WYPŁATA RACHUNEK ZA TELEFON -550 11-11111111 WYPŁATA WYPŁATA W BANKOMACIE -1050 11-11111111 WYPŁATA -2320,5 11-11111111 7479,5 22-22222222 WPŁATA PENSJA 10080 22-22222222 WPŁATA UMOWA O DZIEŁO 1820 22-22222222 WPŁATA 11900 22-22222222 WYPŁATA RACHUNEK ZA PRĄD -790,5 22-22222222 WYPŁATA RACHUNEK ZA TELEFON -560 22-22222222 WYPŁATA WYPŁATA W BANKOMACIE -1050 22-22222222 WYPŁATA -2400,5 22-22222222 9499,5 33-33333333 WPŁATA PENSJA 7420 33-33333333 WPŁATA UMOWA O DZIEŁO 1480 33-33333333 WPŁATA 8900 33-33333333 WYPŁATA RACHUNEK ZA PRĄD -650,5 33-33333333 WYPŁATA RACHUNEK ZA TELEFON -440 33-33333333 WYPŁATA WYPŁATA W BANKOMACIE -940 33-33333333 WYPŁATA -2030,5 33-33333333 6869,5 23848,5 GROUP BY nr_konta, typ, kategoria GROUP BY nr_konta, typ GROUP BY nr_konta bez GROUP BY Wartości kolumn które uległy "zwinięciu" w wyniku rozszerzenia klauzuli GROUP BY przyjmują wartości puste

Częściowa operacja ROLLUP 231 Operacja ROLLUP może być operacją częściową czyli obejmować tylko część kolumn występujących w klauzuli GROUP BY Dla przykładu: GROUP BY nr_konta, typ, ROLLUP(kategoria) Wyznaczy następujące posumowania GROUP BY nr_konta, typ, kategoria GROUP BY nr_konta, typ SELECT nr_konta, typ, sum(kwota) GROUP BY nr_konta, rollup(typ); GROUP BY nr_konta, typ GROUP BY nr_konta NR_KONTA TYP SUM(KWOTA) ------------- ---------- ---------- 11-11111111 WPŁATA 9800 11-11111111 WYPŁATA -2320,5 11-11111111 7479,5 22-22222222 WPŁATA 11900 22-22222222 WYPŁATA -2400,5 22-22222222 9499,5 33-33333333 WPŁATA 8900 33-33333333 WYPŁATA -2030,5 33-33333333 6869,5

CUBE 232 Operator CUBE tworzy podsumowania dla wszystkich możliwych kombinacji grupowanych kolumn. W terminologii analiz wielowymiarowych, CUBE generuje podsumowania częściowe i ogólne tabeli faktów dla wszystkich możliwych wymiarów. Dla n kolumn grupujących CUBE tworzy 2 n podsumowań. Przykładowo klauzula GROUP BY CUBE(kontynent, kraj, miejscowość, dzielnica) Wyznaczy następujące posumowania GROUP BY kontynent, kraj, miejscowość, dzielnica GROUP BY kontynent, kraj, miejscowość GROUP BY kontynent, kraj, dzielnica GROUP BY kontynent, dzielnica, miejscowość GROUP BY dzielnica, miejscowość, kraj GROUP BY kontynent, kraj GROUP BY kontynent, miejscowość GROUP BY kontynent, dzielnica GROUP BY kraj, dzielnica GROUP BY kraj, miejscowość GROUP BY dzielnica, miejscowość GROUP BY kontynent GROUP BY kraj GROUP BY miejscowość GROUP BY dzielnica bez GROUP BY podsumowanie całkowite

Przykład użycia CUBE 233 SELECT nr_konta, typ, sum(kwota) GROUP BY cube(nr_konta, typ) ORDER BY nr_konta, typ NR_KONTA TYP SUM(KWOTA) ------------- ---------- ---------- 11-11111111 WPŁATA 9800 11-11111111 WYPŁATA -2320,5 11-11111111 7479,5 22-22222222 WPŁATA 11900 22-22222222 WYPŁATA -2400,5 22-22222222 9499,5 33-33333333 WPŁATA 8900 33-33333333 WYPŁATA -2030,5 33-33333333 6869,5 WPŁATA 30600 WYPŁATA -6751,5 23848,5 GROUP BY nr_konta, typ GROUP BY nr_konta GROUP BY typ bez GROUP BY

Częściowa operacja CUBE 234 Analogicznie jak w przypadku częściowej operacji ROLLUP tak samo istnieje częściowa operacja CUBE Pozwala ona objąć operacją CUBE tylko część wierszy występujących w klauzuli GROUP BY Dla przykładu: GROUP BY nr_konta, CUBE(typ, kategoria) Wyznaczy następujące posumowania GROUP BY nr_konta, typ, kategoria GROUP BY nr_konta, typ GROUP BY nr_konta, kategoria GROUP BY nr_konta SELECT nr_konta, typ, sum(kwota) GROUP BY nr_konta, cube(typ) ORDER BY nr_konta, typ GROUP BY nr_konta, typ GROUP BY nr_konta NR_KONTA TYP SUM(KWOTA) ------------- ---------- ---------- 11-11111111 WPŁATA 9800 11-11111111 WYPŁATA -2320,5 11-11111111 7479,5 22-22222222 WPŁATA 11900 22-22222222 WYPŁATA -2400,5 22-22222222 9499,5 33-33333333 WPŁATA 8900 33-33333333 WYPŁATA -2030,5 33-33333333 6869,5

GROUPING SETS 235 Zarówno operacja CUBE jak i ROLLUP może wyznaczać oprócz pożądanych podsumowań, także te, które są zbędne Operacja GROUPING SETS pozwala na jednoznaczne wskazanie tych podsumowań, które chcemy uzyskać Dla przykładu GROUPING SETS( (nr_konta, typ, kategoria), (nr_konta, typ), (nr_konta, kategoria) ) Wyznaczy następujące posumowania GROUP BY nr_konta, typ, kategoria GROUP BY nr_konta, typ GROUP BY nr_konta, kategoria

Przykład użycia GROUPING SETS 236 SELECT nr_konta, typ, sum(kwota) GROUP BY grouping sets((nr_konta, typ),(typ),(nr_konta), ()) ORDER BY nr_konta, typ NR_KONTA TYP SUM(KWOTA) ------------- ---------- ---------- 11-11111111 WPŁATA 9800 11-11111111 WYPŁATA -2320,5 11-11111111 7479,5 22-22222222 WPŁATA 11900 22-22222222 WYPŁATA -2400,5 22-22222222 9499,5 33-33333333 WPŁATA 8900 33-33333333 WYPŁATA -2030,5 33-33333333 6869,5 WPŁATA 30600 WYPŁATA -6751,5 23848,5 GROUP BY nr_konta, typ GROUP BY nr_konta GROUP BY typ bez GROUP BY

Funkcja GROUPING 237 Aby właściwie zinterpretować wiersze uzyskane w wyniku operacji rozszerzających grupowanie musimy potrafić rozróżniać wiersze reprezentujące określone podsumowania Oparcie się na wartościach pustych występujących w kolumnach grupowania może prowadzić do błędów Wartości puste w kolumnach grupowania mogą bowiem wynikać ze zawartości bazy danych Funkcja GROUPING posiadająca jako argument wyrażenie występujące w klauzuli GROUP BY jednoznacznie wskazuje na "zwinięcie" danego wymiaru. Wartość funkcji 1 wskazuje na "zwinięcie", wartość 0 na "normalny" wiersz jaki pojawiłby się bez wykorzystania rozszerzeń grupowania

Użycie funkcji GROUPING (1/2) 238 SELECT nr_konta, typ, grouping(nr_konta) gnr, grouping(typ) gt, sum(kwota) GROUP BY grouping sets((nr_konta, typ),(typ),(nr_konta), ()) ORDER BY nr_konta, typ NR_KONTA TYP GNR GT SUM(KWOTA) ------------- ---------- ---------- ---------- ---------- 11-11111111 WPŁATA 0 0 9800 11-11111111 WYPŁATA 0 0-2320,5 11-11111111 0 1 7479,5 22-22222222 WPŁATA 0 0 11900 22-22222222 WYPŁATA 0 0-2400,5 22-22222222 0 1 9499,5 33-33333333 WPŁATA 0 0 8900 33-33333333 WYPŁATA 0 0-2030,5 33-33333333 0 1 6869,5 WPŁATA 1 0 30600 WYPŁATA 1 0-6751,5 1 1 23848,5

Użycie funkcji GROUPING (2/2) 239 Funkcję GROUPING bardzo często wykorzystuje się także do zastąpienia pustej wartości bardziej znaczącą informacją SELECT decode(grouping(nr_konta),0,nr_konta,'wszystkie konta') nr_konta, decode(grouping(typ),0,typ,'wszystkie typy') typ, sum(kwota) FROM TRANSAKCJE GROUP BY grouping sets((nr_konta, typ),(typ),(nr_konta), ()) NR_KONTA TYP SUM(KWOTA) --------------- -------------- ---------- 11-11111111 WPŁATA 9800 22-22222222 WPŁATA 11900 33-33333333 WPŁATA 8900 11-11111111 WYPŁATA -2320,5 22-22222222 WYPŁATA -2400,5 33-33333333 WYPŁATA -2030,5 Wszystkie konta WPŁATA 30600 Wszystkie konta WYPŁATA -6751,5 11-11111111 Wszystkie typy 7479,5 22-22222222 Wszystkie typy 9499,5 33-33333333 Wszystkie typy 6869,5 Wszystkie konta Wszystkie typy 23848,5

240 Wykorzystanie rozszerzenia grupowania W aplikacji rozszerzenie grupowania można wykorzystać do wypełnienia za pomocą jednego zapytania szablonu macierzowego. Przez dodanie innych funkcji grupujących można za pomocą jednego zapytania wyliczyć wiele takich szablonów SELECT nr_konta, typ, avg(kwota) GROUP BY cube(nr_konta, typ) ORDER BY nr_konta, typ NR_KONTA 11-11111111 TYP WPŁATA WYPŁATA 1400,00-257,83 ŚREDNIA: 467,47 NR_KONTA TYP AVG(KWOTA) --------------- ---------- ---------- 11-11111111 WPŁATA 1400,00 11-11111111 WYPŁATA -257,83 11-11111111 467,47 22-22222222 WPŁATA 1487,50 22-22222222 WYPŁATA -300,06 22-22222222 593,72 33-33333333 WPŁATA 1271,43 33-33333333 WYPŁATA -225,61 33-33333333 429,34 WPŁATA 1390,91 WYPŁATA -259,67 496,84 22-22222222 33-33333333 ŚREDNIA: 1487,50 1271,43 1390,91-300,06-225,61-259,67 593,72 429,34 496,84

241 Wykorzystanie rozszerzenia grupowania Innym przykładowym sposobem wykorzystania rozszerzonego grupowania jest jednoczesne odświeżenie wielu tabel pełniących następnie rolę perspektyw materializowanych INSERT FIRST WHEN (gk=1 AND gt=0) THEN INTO mv_typ_sum(typ,kwota) VALUES (typ, suma) WHEN (gk=0 AND gt=1) THEN INTO mv_nr_konta_sum(nr_konta,kwota) VALUES (nr_konta,suma) WHEN (gk=0 AND gt=0) THEN INTO mv_nr_konta_typ_sum(nr_konta, typ, kwota) VALUES (nr_konta, typ, suma) SELECT nr_konta, typ, sum(kwota) suma, grouping(nr_konta) gk, grouping(typ) gt GROUP BY cube(nr_konta, typ) SELECT * FROM mv_nr_konta_typ_sum; SELECT * FROM mv_typ_sum; TYP KWOTA ---------- ---------- WPŁATA 30600 WYPŁATA -6751,5 SELECT * FROM mv_nr_konta_sum; NR_KONTA KWOTA --------------- ---------- 11-11111111 7479,5 22-22222222 9499,5 33-33333333 6869,5 NR_KONTA TYP KWOTA --------------- ---------- ---------- 11-11111111 WPŁATA 9800 11-11111111 WYPŁATA -2320,5 22-22222222 WPŁATA 11900 22-22222222 WYPŁATA -2400,5 33-33333333 WPŁATA 8900 33-33333333 WYPŁATA -2030,5

Rozszerzenia grupowania a wydajność 242 Wszystkie rozszerzenia grupowania są operacjami bardzo wydajnymi znacząco przewyższającymi alternatywne rozwiązania SELECT nr_konta, typ, avg(kwota) GROUP BY cube(nr_konta, typ); Plan wykonywania ----------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4...) 1 0 SORT (GROUP BY) (Cost=4 Card=5 Bytes=110) 2 1 GENERATE (CUBE) 3 2 SORT (GROUP BY) (Cost=4...) 4 3 TABLE ACCESS (FULL) OF...) Plan wykonywania --------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=14...) 1 0 UNION-ALL 2 1 SORT (GROUP BY) (Cost=4 Card=5 Bytes=110) 3 2 TABLE ACCESS (FULL) OF 'TRANSAKCJE' (Cost=2 Card=48 Bytes=1056) 4 1 SORT (GROUP BY) (Cost=4 Card=3 Bytes=45) 5 4 TABLE ACCESS (FULL) OF 'TRANSAKCJE' (Cost=2 Card=48 Bytes=720) 6 1 SORT (GROUP BY) (Cost=4 Card=2 Bytes=22) 7 6 TABLE ACCESS (FULL) OF 'TRANSAKCJE' (Cost=2 Card=48 Bytes=528)... SELECT nr_konta, typ, avg(kwota) GROUP BY nr_konta, typ UNION ALL SELECT nr_konta, NULL, avg(kwota) GROUP BY nr_konta UNION ALL SELECT NULL, typ, avg(kwota) GROUP BY typ UNION ALL SELECT NULL, NULL, avg(kwota)