Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

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.

instagram viewer

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.