funkcje analityczne, MATERIALY, Bazy danych


FUNKCJE ANALITYCZNE

CO TO SĄ FUNKCJE ANALITYCZNE??

Funkcje analityczne są analitycznym rozszerzeniem funkcji SQL.

FUNKCJE ANALITYCZNE DZILIMY NA:

- funkcje rankingu - wykorzystywane do wyznaczania rankingów, podziałów zbiorów wierszy na grupy (n-tki),

- funkcje okna - wyznaczają wartości agregatów dla zbiorów wierszy wyznaczanych przy użyciu definicji okna,

- funkcje raportujące - wyznaczają wartości agregatów dla zbiorów wierszy

w ramach tzw. partycji

- funkcje LAG/LEAD - znajdują wartości określonych atrybutów w wierszach sąsiednich,

- funkcje FIRST/LAST - znajdują początkową lub końcową wartość w uporządkowanym zbiorze,

- odwrotne funkcje procentyli - wyznaczają wartość występującą w określonym miejscu w uporządkowanym zbiorze,

- funkcje rankingu hipotetycznego - wyznaczają hipotetyczny ranking zadanych wartości w uporządkowanym zbiorze,

- funkcja WIDTH_BUCKET - dzieli uporządkowany zbiór na określoną liczbę przedziałów o zadanej szerokości,

- funkcje statystyczne - wyliczają zmiany poziomów i inne statystyki.

MIEJSCE FUNKCJI ANALITYCZNYCH I RÓŻNICE FUNKCJI ANALITYCZNYCH OD SQL

• Funkcje analityczne różnią się sposobem działania i użycia od funkcji SQL-owych,

• Funkcje analityczne określając wynik dla bieżącego wiersza korzystają z informacji znajdujących się w sąsiadujących wierszach,

• Uwzględniając przetwarzanie polecenia SQL, można powiedzieć, że wartości funkcji analitycznych są wyliczane po wszystkich składowych operacjach (połączeniach, selekcji wierszy, grupowaniu, selekcji grup itd.),

• W przypadku funkcji analitycznych po uzyskaniu wyniku wykonywana jest tylko operacja sortowania.

0x01 graphic

•Składnia funkcji analitycznych jest kolejna różnica pomiędzy funkcjami analitycznymi a SQL. Skladnia jest następująca

0x01 graphic

Ściśle określone miejsce wyznaczania wartości funkcji analitycznych ma swoje znaczące konsekwencje:

- nie mogą być używane w klauzulach WHERE, GROUP BY, HAVING

- wykorzystywane są tylko i wyłącznie w klauzuli SELECT lub ORDER BY

- działają tylko i wyłącznie na wierszach, grupach będących efektem finalnym zapytania

- wiersze lub grupy odrzucone za pomocą klauzul WHERE lub HAVING nie są uwzględniane przez funkcje analityczne

np. Jeśli odrzucimy w zapytaniu wszystkich zarabiających powyżej 1000 zł. to może okazać się, że w rankingu osób wg zarobków pierwsze miejsce zajmuje osoba z kwotą 900 zł.

PARTYCJE, OKNA, BIEŻĄCY WIERSZ

• Do sprawnego posługiwania się Funkcjami analitycznymi musimy mic znajomość odpowiedniej terminologii.

- Partycje - umożliwiają podział rezultatu zapytania na autonomiczne, niezależne zbiory, w ramach których funkcje analityczne będą mogły wyznaczać oddzielne rankingi, średnie itp.

- Okna - występują tylko w przypadku funkcji okna. Pozwalają na zdefiniowane ruchomego zakresu - określanego indywidualnie dla każdego wiersza - w ramach którego funkcja będzie wyznaczała swoją wartość.

- Bieżący wiersz - wiersz, dla którego w danym momencie wyznaczany jest wynik funkcji analitycznej. W szczególności stanowi on punkt odniesienia przy wyznaczaniu zakresu okna.

0x01 graphic

Funkcje rankingu

• Funkcje rankingu wyznaczają ranking wiersza porównując wartości w nim zawarte z wartościami wierszy znajdujących się w tej samej partycji.

• Partycje pozwalają na wyznaczenie wielu oddzielnych rankingów.

• Porządek wierszy w partycji jest podstawowym elementem definiującym ranking

• Przykłady funkcji rankingu:

- RANK, DENSE_RANK

- CUME_DIST

- PERCENT_RANK

- NTILE

- ROW_NUMBER

• Składnia: 0x01 graphic

Funkcja okna

Definicja okna:

• Okno może być jednego z dwóch typów od użytych słów kluczowych przy jego definicji

- ROWS - okno fizyczne - wyrażone w liczbie krotek. Musi być albo stałą albo wyrażeniem, którego wartością jest liczba całkowita dodatnia.

- RANGE - okno logiczne - wyrażone przy użyciu wartości o typie zgodnym z atrybutem porządkującym wiersze w partycji. Jeśli wyrażenie to jest liczbą lub datą, wówczas wartość może być liczbądodatnią.

Jeśli wyrażenie w klauzuli ORDER BY jest datą wówczas wartość może być zarówno liczbą dodatnią jak i interwałem czasu

• Zakres okna może być zdefiniowany za pomocą wyrażeń

- BETWEEN … AND … - pozwala na jawne zdefiniowanie zarówno początku jak i końca okna

- określenia tylko początku okna, koniec okna w takim przypadku będzie domyślny - bieżący wiersz.

• Słowa kluczowe wykorzystywane przy definiowaniu okna:

- UNBOUNDED PRECEDING - początkiem okna będzie pierwszy wiersz w partycji, używane tylko przy definiowaniu początku okna

- UNBOUNDED FOLLOWING - końcem okna będzie końcowy wiersz w partycji, używane tylko przy definiowaniu końca okna

- CURRENT ROW - bieżący wiersz lub wartość w zależności od typu okna

• Początek okna nigdy nie może być za końcem okna

• Dla każdego wiersza okno wyznaczane jest indywidualnie

• Pominięcie definicji okna jest równoznaczne z wyrażeniem:

0x01 graphic

Okno obejmujące 5 wierszy: bieżący i po 2 przed i po bieżącym wierszu

0x01 graphic

• Okno rozpoczynające się od bieżącego wiersza a kończące na końcu partycji

0x01 graphic

• Okno obejmujące dwa ubiegłe miesiące

0x01 graphic

• Okno obejmujące wiersze z wartościami atrybutu nie mniejszymi niż 100 i nie większymi niż 200 od wartości w bieżącym wierszu

0x01 graphic

PRZYKŁAD:

Przykłady funkcji okna

• Dla każdej transakcji przedstaw jej datę, kwotę na jaką opiewała oraz:

- saldo po wykonaniu operacji,

- średnią kwotę operacji z ostatniego roku,

- minimalną kwotę z 3 ostatnich operacji,

- ilość operacji wykonanych od 6 miesięcy wstecz do 6 miesięcy po transakcji.

0x01 graphic

0x01 graphic

Funkcje raportujące

• Funkcje raportujące podobnie jak funkcje okna pozwalają na wyznaczenie wartości funkcji agregujących w oparciu o zbiór wierszy uzyskanych w wyniku zapytania.

• W odróżnieniu od funkcji okna nie wprowadzają one definicji okna, ani porządku wierszy w partycji.

• Zakresem obejmowanym do wyznaczenia wyniku funkcji agregujących jest zawsze cała partycja

• Funkcje raportujące są bardzo podobne do tradycyjnych funkcji agregujących: MAX, MIN, AVG, SUM, COUNT, STDDEV, VARIANCE, RATIO_TO_REPORT. Funkcjami

raportującymi mogą również funkcje regresji liniowej.

• Dzięki funkcjom raportującym mamy z poziomu pojedynczych wierszy dostęp do agregatów wyznaczonych na grupie.

• Składnia:

0x01 graphic

PRZYKŁAD

• Dla każdej transakcji przedstaw jej kwotę, datę i kategorię,

oraz:

- średnią kwotę operacji wchodzących w skład tej samej kategorii

- udział kwoty transakcji do wszystkich transakcji z tej samej kategorii

0x01 graphic

Funkcje LAG/LEAD

• Bardzo ciekawymi funkcjami analitycznymi o wielu zastosowaniach są funkcje LAG i LEAD.

• Funkcje te mogą sięgać do wartości określonych atrybutów znajdujących się w sąsiednich wierszach w tej samej partycji

• Przykłady:

- Pokaż okresy w jakich występował określony stan konta

- Pokaż zysk z kolejnych lat oraz różnicę w stosunku do zysku z lat poprzednich

• Funkcje LAG i LEAD wymagają określenia kolejności wierszy w partycji

• Składnia:

0x01 graphic
0x01 graphic

PRZYKŁAD:

0x01 graphic

Funkcje FIRST/LAST

• Funkcje FIRST/LAST są odpowiednikami funkcji okna FIRST_VALUE i LAST_VALUE. Działają one jednakże na całej partycji i nie ma w nich definicji okna.

• Funkcje FIRST/LAST mogą działać w dwóch trybach

- jako funkcje agregujące - bez użycia klauzuli OVER - w tym

przypadku "partycją" jest grupa wierszy (GROUP BY)

- jako zwykłe funkcje raportujące - z wykorzystaniem klauzuli OVER

• Składnia:

0x01 graphic

PRZYKŁAD:

1.Dla każdego roku wyświetl kwotę oraz datę największego przychodu (funkcja FIRST jako funkcja agregująca).

0x01 graphic

2.Dla każdej transakcji wyświetl różnicę kwoty transakcji i kwoty pierwszej transakcji wykonanej tego samego roku.

0x01 graphic

Funkcje PERCENTILE_DISC i PERCENTILE_CONT

• Funkcja CUME_DIST może służyć do wyznaczenia tzw. procentyli czyli określenia na jakim miejscu w uporządkowanym zbiorze, wyrażonym procentowo, znajduje się określona wartość

• Funkcje PERCENTILE_DISC i PERCENTILE_CONT służą do operacji odwrotnej. Informują jaka wartość znajduje się na określonej pozycji w uporządkowanym zbiorze wartości.

• PERCENTILE_DISC wyznaczane jest przez przeglądanie wyników uzyskanych w wyniku

funkcji CUME_DIST. Pierwszy wiersz, w którym wynik funkcji CUME_DIST jest większy od argumentu funkcji

PERCENTILE_DISC wyznacza poszukiwaną wartość.

• Wynik funkcji PERCENTILE_CONT jest wyznaczany przez liniową interpolację wierszy otaczających wskazaną pozycję. Algorytm do wyznaczenia wartości PERCENTILE_CONT(x) jest następujący:

- RN = (1+x*(n-1)) gdzie n jest liczbą wierszy w grupie

- CRN = CEIL(RN); FRN = FLOOR(RN)

- Jeśli CRN = FRN wówczas wynikiem jest wartość znajdująca się w wierszu RN w przeciwnym przypadku wynikiem jest wartość wyrażenia (CRN-RN)*(wartość z wiersza CRN)+(RN-FRN)*(wartość z wiersza FRN)

• Funkcje mają dwie postacie: funkcji agregujących i raportujących

• Składnia:

0x01 graphic

PRZYKŁAD:

0x01 graphic

Funkcje rankingu hipotetycznego

• Funkcje rankingu mają swoje odpowiedniki wyznaczające hipotetycznyranking zadanych wartości

• Mogą być wykorzystywane do badania sytuacji "co by było gdyby"

• Do funkcji rankingu hipotetycznego zaliczamy RANK, DENSE_RANK,

PERCENT_RANK i CUME_DIST. Argumentem tych funkcji jest wartość dla której poszukujemy wyniku rankingu

• Funkcje rankingu hipotetycznego są funkcjami agregującymi i działają na zbiorze wierszy znajdujących się w grupie

• Liczba i typy argumentów funkcji rankingu hipotetycznego muszą odpowiadać konstrukcji klauzuli ORDER BY

• Składnia:

0x01 graphic

PRZYKŁAD:

- na jakim miejscu znajdowałby klient z rocznym przychodem 3000 zł

- na jaki miejscu, wyrażonym procentowo, w przychodzie z roku 1999 określonego klienta znalazłaby się wpłata 1000 zł.

0x01 graphic

Funkcja WIDTH_BUCKET

• Interesującą funkcją zaliczaną do funkcji analitycznych jestfunkcja WIDTH_BUCKET. Pozwala ona na zdefiniowanie zakresu i szerokości przedziałów oraz wyznaczanie numerów

przedziałów, w których mieszczą się określone wartości w poszczególnych wierszach.

• W przeciwieństwie do funkcji NTILE która dzieli grupę wierszy na równoliczne przedziały, funkcja WIDTH_BUCKET dzieli grupę wierszy na przedziały o równej szerokości

• Składnia:

0x01 graphic

PRZYKŁAD:

- Wyznacz wyniki egzaminu zakładając, że maksymalna liczba punktów to 100 a liczba punktów potrzebnych do zaliczenia to 50.

- Na podstawie sumy posiadanych aktywów pogrupuj klientów na dwie kategorie "bogatych" i "biednych" zakładając, że minimalny analizowany próg to 5000, maksymalny to 10000 a podział ma być pośrodku.

0x01 graphic



Wyszukiwarka

Podobne podstrony:
PHP MySQL SQL CGI bazy danych w internecie, Oracle, Oracle - materiały różne
Bazy danych - bibliografia, Materiały na studia, Moje studia - INIB
15.01.'07, materiały edukacyjne, Bazy danych
Zestawienie funkcji modułu mysqli odczytujących dane, bazy danych
tworzenie bazy danych, do uczenia, materialy do nauczania, rok2010-2011, 24.10.2010, baza danych
05. Access - zadania, Bazy danych-materiały, Acces
poprawa sprawdzianu, materiały edukacyjne, Bazy danych
Bazy danych Oracle, Oracle, Oracle - materiały różne
poprawa sprawdzianu-1, materiały edukacyjne, Bazy danych
1 Tworzenie bazy danychid 10005 ppt
bazy danych II
Bazy danych
Podstawy Informatyki Wykład XIX Bazy danych
Bazy Danych1
eksploracja lab03, Lista sprawozdaniowych bazy danych

więcej podobnych podstron