Wszechstronność SQL jako języka zapytań DBMS wzrosła na przestrzeni lat. Jego rozbudowana użyteczność i wszechstronność sprawiają, że jest to ulubione narzędzie każdego analityka danych.
Poza zwykłymi funkcjami SQL istnieje całkiem sporo zaawansowanych funkcji. Funkcje te są powszechnie znane jako funkcje okna. Jeśli masz do czynienia ze złożonymi danymi i chcesz wykonać zaawansowane obliczenia, możesz ich użyć, aby jak najlepiej wykorzystać swoje dane.
Znaczenie funkcji okien
W SQL dostępnych jest kilka funkcji okna, a każda z nich pomoże ci wykonać serię obliczeń. Od tworzenia partycji po szeregowanie wierszy lub przypisywanie numerów wierszy, te funkcje okna wykonują po trochu wszystko.
Funkcje okna są korzystne, gdy stosujesz funkcje agregujące do określonego zestawu danych lub kolekcji wierszy. Funkcje te wykraczają poza funkcje agregacji udostępniane przez GROUP BY. Jednak główna różnica polega na tym, że w przeciwieństwie do funkcji grupowania dane nie są łączone w jeden wiersz.
Nie możesz używać funkcji okna w GDZIE, Z, I GRUPUJ WEDŁUG sprawozdania.
Składnia funkcji okna
Kiedy odwołujesz się do dowolnej funkcji okna, musisz postępować zgodnie z domyślną strukturą składni, aby działała poprawnie. Jeśli zbudujesz polecenie nieprawidłowo, pojawi się błąd, a Twój kod nie zadziała.
Oto domyślna składnia:
WYBIERAĆ nazwakolumny1,
{funkcja_okna}(nazwa_kolumny2)
OVER([PARTITION BY nazwa_kolumny1] [ORDER BY nazwa_kolumny3]) AS nowa_kolumna
Z nazwa_tabeli;
Gdzie:
- nazwa_kolumny1 to nazwa pierwszej kolumny, którą chcesz wybrać.
- {funkcja_okna} to nazwa funkcji agregującej, takiej jak suma, średnia, liczba, numer_wiersza, ranga lub ranga_gęstości.
- nazwakolumny2 to nazwa kolumny, do której stosujesz funkcję okna.
- nazwakolumny3 to nazwa trzeciej kolumny, która będzie stanowić podstawę partycji.
- nowa_kolumna to etykieta nowej kolumny, którą można zastosować za pomocą JAK słowo kluczowe.
- Nazwa tabeli jest nazwą tabeli źródłowej.
Funkcje okna różnią się od niektórych większość podstawowych poleceń SQL. W przeciwieństwie do funkcji agregujących w SQL, tych funkcji okna można używać do wykonywania funkcji zaawansowanych.
Przygotowanie zestawu danych
Możesz użyć STWÓRZ TABELĘ oświadczenie do utwórz nową tabelę w SQL. Oto przykładowy zestaw danych, którego ten przewodnik użyje do zdefiniowania niektórych funkcji okna:
Data zamówienia |
Kategoria |
Kolor |
Cena sprzedaży |
Ilość |
---|---|---|---|---|
08-11-2016 |
Telefony |
Czarny |
907.152 |
6 |
12-06-2016 |
Segregatory |
Zielony |
18.504 |
3 |
11-10-2015 |
Urządzenia |
Żółty |
114.9 |
5 |
11-10-2015 |
Stoły |
brązowy |
1706.184 |
9 |
09-06-2014 |
Telefony |
Czerwony |
911.424 |
4 |
09-06-2014 |
Papier |
Biały |
15.552 |
3 |
09-06-2014 |
Segregatory |
Czarny |
407.976 |
3 |
09-06-2014 |
Urządzenia |
Żółty |
68.81 |
5 |
09-06-2014 |
Segregatory |
Zielony |
2.544 |
3 |
09-06-2014 |
Składowanie |
Pomarańczowy |
665.88 |
6 |
09-06-2014 |
Składowanie |
Pomarańczowy |
55.5 |
2 |
15-04-2017 |
Telefony |
Czarny |
213.48 |
3 |
05-12-2016 |
Segregatory |
Zielony |
22.72 |
4 |
22-11-2015 |
Urządzenia |
Zielony |
60.34 |
7 |
22-11-2015 |
Krzesła |
Ciemny brąz |
71.372 |
2 |
13-05-2014 |
Meble |
Pomarańczowy |
190.92 |
5 |
Wyjaśnienie funkcji sumy
Załóżmy, że chcesz obliczyć całkowitą sprzedaż dla każdej wartości w kolumnie kategorii. Oto jak możesz to zrobić:
WYBIERAĆKategoria, kolor,
suma (cena_sprzedaży)
OVER (kolejność według kategorii) AS total_sales
Z sahil.sample;
W powyższym kodzie instrukcja SQL pobiera kategorię i kolor z oryginalnego zestawu danych. Funkcja sum sumuje kolumnę sale_price. Czyni to według kategorii, ponieważ klauzula OVER określa kolejność według kolumny kategorii. Ostateczny wynik jest następujący:
Jak korzystać z funkcji okna Avg().
Podobnie jak funkcja sumy, możesz obliczyć średnią dla wiersza danych za pomocą funkcji śr funkcjonować. Zamiast sumy otrzymasz kolumnę ze średnią sprzedażą.
WYBIERAĆKategoria, kolor,
średnia (cena_sprzedaży)
OVER (kolejność według kategorii) AS avg_sales
Z sahil.sample;
Naucz się korzystać z funkcji okna Count().
Podobnie jak funkcje sum i avg, funkcja okna zliczania w SQL jest dość prosta i działa na tych samych zasadach, co pozostałe dwie funkcje. Po przekazaniu funkcji count otrzymasz całkowitą liczbę każdej wartości w nowej kolumnie.
Oto jak możesz obliczyć liczbę:
WYBIERAĆKategoria, kolor,
liczyć (kategoria)
OVER (kolejność według kategorii) AS item_count
Z sahil.sample;
Funkcja okna Row_Number().
W przeciwieństwie do niektórych innych funkcji okna wymienionych powyżej, row_number() działa nieco inaczej. Funkcja row_number() przypisuje numer wiersza do każdego wiersza, w zależności od klauzuli order by. Początkowy numer wiersza to 1; row_number przypisuje odpowiednią wartość do każdego wiersza aż do końca.
Oto podstawowa struktura funkcji row_number():
WYBIERAĆKategoria, kolor,
Numer wiersza()
OVER (kolejność według kategorii) AS numer_pozycji
Z sahil.sample;
Ale co się stanie, jeśli chcesz przypisać osobne numery wierszy do każdego elementu kategorii? Powyższa składnia ustawia kroczący numer seryjny, niezależnie od elementów przechowywanych w kategorii. Na przykład kategoria urządzeń powinna mieć swoją wyłączną numerację, następnie segregatory i tak dalej.
Możesz użyć przegroda do wykonania tego prostego, ale praktycznego zadania. Słowo kluczowe partition przypisuje wyznaczone numery wierszy na podstawie każdego elementu kategorii.
WYBIERAĆKategoria, kolor,
Numer wiersza()
OVER (podział według kategorii, kolejność według kategorii) AS numer_pozycji
Z sahil.sample;
Funkcje Rank() i Dense_Rank().
The ranga() funkcja działa inaczej niż Numer wiersza() funkcjonować. Musisz określić nazwę kolumny w kolejności według funkcji, aby użyć jej jako podstawy do zdefiniowania wartości rang. Na przykład w poniższym przykładzie kodu można użyć kolumny koloru w kolejności według funkcji. Zapytanie użyje następnie tej kolejności do przypisania wartości rangi do każdego wiersza.
Możesz użyć poniższej składni kodu, aby przekazać funkcję rangi w SQL:
WYBIERAĆKategoria, kolor,
ranga()
OVER (kolejność według koloru) AS item_rank
Z sahil.sample;
Spójrz na dane wyjściowe, aby zrozumieć, jak działa ta funkcja.
Kolejność według funkcji sortuje kategorię koloru, podczas gdy funkcja rangi przypisuje rangę każdemu kolorowi. Jednak wszystkie te same wartości kolorów mają tę samą rangę, podczas gdy różne kolory mają oddzielne rangi. Kolor czarny występuje trzykrotnie w zbiorze danych; zamiast przypisywania wartości rangi 1, 2 i 3, elementy koloru czarnego otrzymują rangę 1.
Jednak następny kolor Brązowy otrzymuje rangę 4 zamiast rangi 2. Funkcja rangi pomija wartości i przypisuje kolejne wartości chronologiczne różnym wpisom. Jeśli chcesz przypisać bardziej znaczącą wartość rangi, możesz użyć metody gęsty_rank() funkcjonować.
Funkcja gęstości_rank nie pomija żadnych wartości rangi podczas sortowania według funkcji. Na przykład pierwsze trzy kolorowe elementy (czarny) będą miały rangę 1. Jednak następujący kolor (brązowy) nie będzie miał rangi 4, ale rangę 2, która jest kolejnym numerem chronologicznym na liście numeracji. Funkcja gęsta_rank jest bardziej praktyczną funkcją okna, ponieważ przypisuje znaczącą wartość do listy elementów.
Oto jak możesz użyć funkcjidensity_rank w SQL:
WYBIERAĆKategoria, kolor,
gęsty_rank()
OVER (kolejność według koloru) AS item_rank
Z sahil.sample;
A oto przykład tego, jak będzie wyglądać wynik tej funkcji:
Funkcje SQL na ratunek
Funkcje okien SQL są idealne do przeprowadzania zaawansowanych operacji analitycznych. Możesz jednak użyć wielu innych poleceń SQL, aby mieć pewność, że Twoje umiejętności obliczeniowe są na najwyższym poziomie. Kiedy łączysz i obliczasz wiele wyników za jednym razem, nie ma nic lepszego niż użycie zapytań podrzędnych SQL.
Zapytania podrzędne są doskonałym narzędziem do wykonywania zaawansowanych funkcji, poprawiających jakość wyników. W zależności od potrzeb w danej chwili możesz dostosować swoje zapytania i zwiększyć ich skuteczność, aby odpowiadały Twoim wymaganiom.