Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Przetwarzanie w oknie - nowa siła zapytań

Podobne prezentacje


Prezentacja na temat: "Przetwarzanie w oknie - nowa siła zapytań"— Zapis prezentacji:

1 Przetwarzanie w oknie - nowa siła zapytań
mgr inż. Andrzej Ptasznik

2 Trochę klasyki Zapytania w języku SQL bazowały na trzech podstawowych operacjach na modelu relacyjnym: Projekcja Selekcja Łączenie

3 Tabela wyjściowa Teza : Podstawa zapytań to ograniczenie zawartości tabeli wynikowej do zdefiniowanego zakresu i postaci danych

4 Projekcja : Wybór podzbioru dostępnych kolumn
SELECT Handlowiec, DataTransakcji, Kwota FROM Tabela

5 Selekcja : Wybór wierszy spełniających zadane wyrażenie logiczne
Region =‚Azja’ Select Handlowiec, Region, Miasto, DataTransakcji, Kwota FROM Tabela WHERE Region=‚Azja’

6 Łączenie : Sprowadza problem do jednej tabeli
Tabela : Handlowcy Tabela : Transakcje SELECT * FROM Handlowcy as H JOIN Transakcje as T ON H.idhandlowca=T.idhandlowca Wynik łączenia

7 Przetwarzanie zapytania
Konstruktor wiersza Przetwarzanie zapytania Select LEFT(Nazwisko,1) +’ ‚ +LEFT(IMIE,1) as Inicjały, Ocena, DATENAME(mm,DataWystawienia) as miesiac Select Pesel, Avg(Ocena) as Srednia FROM Uczniowie JOIN Oceny ON Uczniowie.Iducznia=Oceny.idUcznia Where DataWystawienia Between ‚ ’ and ‚ ’ Przygotowanie zbioru wynikowego do przetwarzania Group by Pesel Having Avg(ocena) > 3,0 Frazy wspomagające wykorzystanie funkcji agregujących Zbiór1 Zbiór2 Zbiór3 Dalej

8 Powrót Zbiór wyjściowy do przetwarzania zapytania

9 Wynik zapytania po przetworzeniu
Dla każdego wiersza zbioru wejściowego powstaje jeden wiersz jako wynik działania konstruktora wiersza. Powrót

10 Zastosowanie filtru Having
Grupy wierszy - wynik operacji grupowania Dla każdej grupy konstruktor wiersza tworzy jeden wiersz wynikowy - dala każdej grupy wykonywana jest funkcja agregująca Powrót Wynik zapytania Zastosowanie filtru Having

11 Filtry zapytań: ON … WHERE … HAVING … TOP .. [ORDER BY] ORDER BY
Paradoks klauzuli ORDER BY : Create view Test as Select nazwisko, pesel From uczniowie Order By Nazwisko Filtry zapytań: ON … WHERE … HAVING … TOP .. [ORDER BY] ORDER BY OFFSET … FETCH …. Msg 1033, Level 15, State 1, Procedure Test4442, Line 4 The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified. Create view Test as Select top 100 percent nazwisko, pesel From uczniowie Order By Nazwisko Definicja OK Select * From Test … a gdzie porządek ????

12 Krótki przegląd nowości
Select przedmiot, avg(ocena) as srednia from UczniowieXML outer apply ( Select k.value('Przedmiot[1]', 'varchar(50)') as Przedmiot, k.value('Ocena[1]', 'numeric(5,2)') as Ocena From WykazOcen.nodes('Dzienniczek/Ocena') t(k) Where year(k.value('DataWystawienia[1]', 'date'))=2009 ) as tmp Group by przedmiot Wynik zapytania

13 Krótki przegląd nowości
with Tmp as ( SELECT nazwisko+' '+imie AS Uczen, przedmiot, ocena FROM V_OCENY ) Select Uczen, isnull( cast(fizyka as numeric(5,2)) , 0.00) as Fizyka, isnull( cast(matematyka as numeric(5,2)) , 0.00) as Matematyka, isnull( cast(Geografia as numeric(5,2)) , 0.00) as Geografia, isnull( cast(Literatura as numeric(5,2)) , 0.00) as Literatura From tmp pivot ( avg(ocena) for przedmiot in ([Fizyka], [Matematyka], [Geografia], [Literatura])) as A

14 Krótki przegląd nowości
With Tmp as ( Select Nazwisko, Imie,Idpracownika, cast('/' as varchar(512)) as sciezka from Pracownicy where Idpracownika=2 union all Select p.nazwisko, P.imie,P.idpracownika, cast( tmp.sciezka+tmp.nazwisko+'/' as varchar(512)) as sciezka from tmp join Pracownicy as P on tmp.idpracownika=P.idprzelozonego ) Select * from tmp

15 With Matematyka as ( Select top 5 Nazwisko, imie,Pesel,avg(ocena) as srednia from Uczniowie join Oceny on Uczniowie.iducznia=Oceny.iducznia join Przedmioty on Oceny.idprzedmiotu=Przedmioty.idprzedmiotu Where Przedmioty.Nazwa='Matematyka' group by Nazwisko, imie,Pesel order by srednia desc ), Fizyka as Where Przedmioty.Nazwa='Fizyka' ) Select nazwisko, imie,pesel From matematyka intersect Select nazwisko, imie,pesel from Fizyka

16 Przetwarzanie w oknie – klauzula OVER
Dla każdego wiersza wyniku zapytania można stosować zbiór funkcji działających na zdefiniowanym zbiorze danych Funkcje : -Agregujące (AUM, AVG, MIN, MAX, AVG …..) Funkcje szeregujące(rankingu) (ROW_NUMBER(), RANK, DENSE_RANK(),NTILE() ) Funkcje pozycji (FIRST_VALUE() , LAST_VALUE() , LEAD(), LAG (), NEXT_VALUE()) Funkcje analityczne (PERCENT_RANK(), PERCENTILE_CONT(), PERCENTILE_DISC())

17 Elementy definiowania okna
Porządkowanie : OVER (ORDER BY Kolumna) Partycjonowanie OVER (PARTITION BY Kolumna) Definicja ramy okna (element ruchomy) OVER (ORDER BY Kolumna ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )

18 PRZYKŁADY Dane sprzedaży Wyniki nauczania

19 … a jaka jest średnia ocen wszystkich???? - dla każdego wiersza
SELECT *, AVG(OCENA) OVER () as SredniaSzkoly FROM Dane Select AVG(OCENA) FROM DANE

20 … a jaka jest średnia ocen dla danej klasy???? - dla każdego wiersza
SELECT *, AVG(OCENA) OVER (PARTITION BY Klasa) as SredniaKlasy FROM Dane Select AVG(OCENA) FROM DANE as D WHERE Klasa=Dane.Klasa

21 … i jeszcze kilka podobnych wartości ???? - dla każdego wiersza
SELECT AVG(OCENA) OVER (PARTITION BY Klasa) as SredniaKlasy, AVG(OCENA) OVER (PARTITION BY Klasa, przedmiot) as SredniaKlasyZPrzedmiotu, AVG(OCENA) OVER (PARTITION BY Uczen,Przedmiot) as SredniaUczniaZPrzedmiotu FROM Dane

22 Funkcje uporządkowanego okna
Funkcje szeregujące(rankingu) (ROW_NUMBER(), RANK, DENSE_RANK(),NTILE() ) Funkcje pozycji (FIRST_VALUE() , LAST_VALUE() , LEAD(), LAG (), NEXT_VALUE())

23 … które miejsce według średniej ocen ma dany uczeń w całej szkole i w swojej klasie
SELECT Uczen, Klasa, RANK() OVER (Order by AVG(ocena) desc ) as MiejsceWSzkole, RANK() OVER (Partition by klasa Order by AVG(ocena) desc ) as MiejsceWKlasie FROM Dane GROUP BY Uczen, Klasa

24 Rama OKNA Okno musi być uporządkowane !!!!!! Rozszerzenie obszaru bieżącego wiersza o wiersze poprzedzające i(lub) następujące OVER (ORDER BY kolumna ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)

25 Month(dataTransakcji) as Miesiac,
With tmp as ( SELECT* , Month(dataTransakcji) as Miesiac, YEAR(DAtaTransakcji) as Rok from vtransakcje ) Select *, SUM(kwota) over (Partition By Handlowiec,Rok) as RocznaSprzedaz, SUM(Kwota) over (Partition By HAndlowiec,Rok Order By miesiac Rows between unbounded preceding and current row) as OdPoczRoku From tmp

26 Rama z wykorzystaniem ROWS

27 Month(dataTransakcji) as Miesiac,
With tmp as ( SELECT* , Month(dataTransakcji) as Miesiac, YEAR(DAtaTransakcji) as Rok from vtransakcje ) Select *, SUM(kwota) over (Partition By Handlowiec,Rok) as RocznaSprzedaz, SUM(Kwota) over (Partition By HAndlowiec,Rok Order By miesiac Range between unbounded preceding and current row) as OdPoczRoku From tmp

28 Rama z wykorzystaniem RANGE

29 Klauzula OVER +funkcje przetwarzające zbiory danych – stanowi kolejne rozszerzenie potencjału zapytań SQL

30 Dziękuję za uwagę … a może pytania ??????


Pobierz ppt "Przetwarzanie w oknie - nowa siła zapytań"

Podobne prezentacje


Reklamy Google