Všestrannost SQL jako dotazovacího jazyka DBMS v průběhu let vzrostla. Jeho rozsáhlá užitečnost a všestrannost z něj činí oblíbenou položku všech datových analytiků.
Kromě běžných funkcí SQL existuje poměrně málo funkcí na pokročilé úrovni. Tyto funkce jsou běžně známé jako funkce okna. Pokud pracujete se složitými daty a chcete provádět pokročilé výpočty, můžete je použít k co nejlepšímu využití dat.
Význam okenních funkcí
V SQL je k dispozici několik funkcí okna a každá vám pomůže provést řadu výpočtů. Od vytváření oddílů po řazení řádků nebo přiřazování čísel řádků, tyto funkce okna dělají trochu ze všeho.
Funkce oken jsou užitečné, když aplikujete agregační funkce na konkrétní datovou sadu nebo kolekci řádků. Tyto funkce jdou nad rámec agregačních funkcí, které GROUP BY poskytuje. Hlavní rozdíl je však v tom, že na rozdíl od funkce seskupování se vaše data neslučují do jednoho řádku.
Nemůžete používat funkce okna v rámci KDE, Z, a SKUPINA VYTVOŘENÁ prohlášení.
Syntaxe funkce okna
Když odkazujete na jakoukoli funkci okna, musíte se řídit výchozí strukturou syntaxe, aby fungovala správně. Pokud příkaz strukturujete nesprávně, zobrazí se chyba a váš kód se nespustí.
Zde je výchozí syntaxe:
VYBRAT název sloupce1,
{window_function} (název sloupce2)
NAD([PARTITION BY columnname1] [ORDER BY columnname3]) AS new_column
FROM název_tabulky;
Kde:
- jméno sloupce1 je název prvního sloupce, který chcete vybrat.
- {window_function} je název agregační funkce jako sum, avg, count, row_number, rank nebo dense_rank.
- název sloupce2 je název sloupce, na který aplikujete funkci okna.
- název sloupce3 je název třetího sloupce, který bude tvořit základ pro oddíl.
- nový_sloupec je štítek pro nový sloupec, který můžete použít pomocí TAK JAKO klíčové slovo.
- název_tabulky je název zdrojové tabulky.
Funkce oken se liší od některých nejzákladnější SQL příkazy. Na rozdíl od agregačních funkcí v SQL můžete tyto funkce okna použít k provádění pokročilých funkcí.
Příprava datové sady
Můžete použít VYTVOŘIT TABULKU prohlášení k vytvořit novou tabulku v SQL. Zde je ukázková datová sada, kterou tato příručka použije k definování některých funkcí okna:
Datum objednávky |
Kategorie |
Barva |
Prodejní cena |
Množství |
---|---|---|---|---|
08-11-2016 |
Telefony |
Černá |
907.152 |
6 |
12-06-2016 |
Pojiva |
Zelená |
18.504 |
3 |
11-10-2015 |
Spotřebiče |
Žlutá |
114.9 |
5 |
11-10-2015 |
Tabulky |
Hnědý |
1706.184 |
9 |
09-06-2014 |
Telefony |
Červené |
911.424 |
4 |
09-06-2014 |
Papír |
Bílý |
15.552 |
3 |
09-06-2014 |
Pojiva |
Černá |
407.976 |
3 |
09-06-2014 |
Spotřebiče |
Žlutá |
68.81 |
5 |
09-06-2014 |
Pojiva |
Zelená |
2.544 |
3 |
09-06-2014 |
Úložný prostor |
oranžový |
665.88 |
6 |
09-06-2014 |
Úložný prostor |
oranžový |
55.5 |
2 |
15-04-2017 |
Telefony |
Černá |
213.48 |
3 |
05-12-2016 |
Pojiva |
Zelená |
22.72 |
4 |
22-11-2015 |
Spotřebiče |
Zelená |
60.34 |
7 |
22-11-2015 |
Židle |
Tmavě hnědá |
71.372 |
2 |
13-05-2014 |
Nábytek |
oranžový |
190.92 |
5 |
Vysvětlení funkce součtu
Předpokládejme, že chcete vypočítat celkový prodej pro každou hodnotu ve sloupci kategorie. Můžete to udělat takto:
VYBRATkategorie, barva,
součet (sale_price)
NAD (pořadí podle kategorie) AS celkový_prodej
OD sahil.ukázka;
Ve výše uvedeném kódu příkaz SQL vytáhne kategorii a barvu z původní datové sady. Funkce součtu sečte sloupec sale_price. Činí tak podle kategorie, protože klauzule OVER určuje řazení podle sloupce kategorie. Konečný výsledek je následující:
Jak používat funkci okna Avg()
Stejně jako funkce součtu můžete vypočítat průměr na řádek dat pomocí prům funkce. Místo součtu získáte sloupec s průměrnými tržbami.
VYBRATkategorie, barva,
průměr (cena v akci)
NAD (pořadí podle kategorie) AS prům_prodej
OD sahil.ukázka;
Naučte se používat funkci okna Count().
Podobně jako funkce sum a avg je funkce okna počtu v SQL docela přímočará a funguje stejně jako ostatní dvě funkce. Když předáte funkci počítání, získáte celkový počet každé hodnoty v novém sloupci.
Počet můžete vypočítat takto:
VYBRATkategorie, barva,
počet (kategorie)
OVER (uspořádat podle kategorie) AS item_count
OD sahil.ukázka;
Funkce okna Row_Number().
Na rozdíl od některých jiných funkcí okna uvedených výše, row_number() funguje mírně odlišně. Funkce row_number() přiřadí každému řádku číslo řádku v závislosti na pořadí podle klauzule. Počáteční číslo řádku je 1; řádek_číslo přiřadí odpovídající hodnotu každému řádku až do konce.
Zde je základní struktura funkce row_number():
VYBRATkategorie, barva,
row_number()
NAD (pořadí podle kategorie) AS číslo_položky
OD sahil.ukázka;
Co se ale stane, pokud chcete každé položce kategorie přiřadit samostatná čísla řádků? Výše uvedená syntaxe nastavuje průběžné sériové číslo bez ohledu na položky uložené v kategorii. Například kategorie spotřebičů by měla mít své výhradní číslování, za nímž by měly následovat pořadače a tak dále.
Můžete použít rozdělit k provedení tohoto jednoduchého, ale praktického úkolu. Klíčové slovo oddílu přiřazuje určená čísla řádků na základě každé položky kategorie.
VYBRATkategorie, barva,
row_number()
OVER (oddíl podle kategorie pořadí podle kategorie) AS číslo_položky
OD sahil.ukázka;
Funkce Rank() a Dense_Rank().
The hodnost() funkce funguje jinak než row_number() funkce. Musíte zadat název sloupce v pořadí podle funkce, abyste jej mohli použít jako základ pro definování hodnot pořadí. Například v následujícím příkladu kódu můžete použít barevný sloupec v pořadí podle funkce. Dotaz pak použije toto pořadí k přiřazení hodnoty pořadí každému řádku.
K předání funkce hodnocení v SQL můžete použít níže uvedenou syntaxi kódu:
VYBRATkategorie, barva,
hodnost()
NAD (pořadí podle barvy) AS item_rank
OD sahil.ukázka;
Podívejte se na výstup, abyste pochopili, jak tato funkce funguje.
Pořadí podle funkce seřadí kategorii barev, zatímco funkce hodnocení přiřadí pořadí každé barvě. Všechny stejné hodnoty barev však mají stejnou úroveň, zatímco různé barvy mají samostatné úrovně. Černá barva se v datové sadě vyskytuje třikrát; místo přiřazení hodnoty hodnosti 1, 2 a 3 získají položky černé barvy hodnosti 1.
Další barva hnědá však získá hodnost 4 místo hodnost 2. Funkce pořadí přeskočí hodnoty a přiřadí další chronologickou hodnotu různým záznamům. Pokud chcete přiřadit smysluplnější hodnotu pořadí, můžete použít dense_rank() funkce.
Funkce dense_rank nepřeskočí žádné hodnoty pořadí během řazení podle funkce. Například první tři barevné předměty (černá) budou mít hodnost 1. Následující barva (hnědá) však nebude mít hodnost 4, ale hodnost 2, což je následující chronologické číslo v seznamu číslování. Funkce dense_rank je praktičtější funkcí okna, protože přiřazuje smysluplnou hodnotu seznamu položek.
Zde je návod, jak můžete použít funkci dense_rank v SQL:
VYBRATkategorie, barva,
dense_rank()
NAD (pořadí podle barvy) AS item_rank
OD sahil.ukázka;
A zde je příklad toho, jak bude vypadat výstup z této funkce:
Funkce SQL k záchraně
Funkce okna SQL jsou ideální pro provádění pokročilých analytických operací. Můžete však použít spoustu dalších příkazů SQL, abyste zajistili, že vaše výpočetní dovednosti budou špičkové. Když zkombinujete a vypočítáte více výsledků najednou, není nic lepšího než použití poddotazů SQL.
Dílčí dotazy jsou vynikajícím nástrojem pro provádění pokročilých funkcí, které zvyšují kvalitu vašich výsledků. V závislosti na potřebě dané hodiny můžete upravit své dotazy a zefektivnit je tak, aby vyhovovaly vašim požadavkům.