Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Všestrannosť SQL ako dotazovacieho jazyka DBMS v priebehu rokov vzrástla. Vďaka svojej rozsiahlej utilite a všestrannosti je obľúbeným nástrojom každého analytika údajov.

Okrem bežných funkcií SQL existuje niekoľko funkcií na pokročilej úrovni. Tieto funkcie sú bežne známe ako funkcie okien. Ak pracujete s komplexnými údajmi a chcete vykonávať pokročilé výpočty, môžete ich použiť na čo najlepšie využitie údajov.

Význam funkcií okien

V SQL je dostupných niekoľko funkcií okna a každá vám pomôže vykonať sériu výpočtov. Od vytvárania oddielov až po klasifikáciu riadkov alebo priraďovanie čísel riadkov, tieto funkcie okien robia zo všetkého trochu.

Funkcie okien sú užitočné, keď aplikujete agregované funkcie na konkrétnu množinu údajov alebo kolekciu riadkov. Tieto funkcie idú nad rámec agregačných funkcií, ktoré poskytuje GROUP BY. Hlavným rozdielom je však to, že na rozdiel od funkcie zoskupovania sa vaše údaje nespájajú do jedného riadka.

instagram viewer

Funkcie okien nemôžete používať v rámci KDE, OD, a GROUP BY Vyhlásenia.

Syntax funkcie okna

Keď odkazujete na akúkoľvek funkciu okna, musíte postupovať podľa predvolenej štruktúry syntaxe, aby fungovala správne. Ak príkaz vytvoríte nesprávne, zobrazí sa chyba a váš kód sa nespustí.

Tu je predvolená syntax:

VYBRAŤ názov stĺpca1,
{window_function} (názov stĺpca2)
NAD([PARTITION BY columnname1] [ORDER BY columnname3]) AS new_column
FROM názov_tabuľky;

Kde:

  • názov stĺpca1 je názov prvého stĺpca, ktorý by ste chceli vybrať.
  • {window_function} je názov agregovanej funkcie, ako je súčet, priemer, počet, číslo_riadku, poradie alebo hustota.
  • názov stĺpca2 je názov stĺpca, na ktorý aplikujete funkciu okna.
  • názov stĺpca3 je názov tretieho stĺpca, ktorý bude tvoriť základ pre oddiel.
  • nový_stĺpec je označenie pre nový stĺpec, ktorý môžete použiť pomocou AS kľúčové slovo.
  • názov_tabuľky je názov zdrojovej tabuľky.

Funkcie okien sa líšia od niektorých najzákladnejšie príkazy SQL. Na rozdiel od agregačných funkcií v SQL môžete tieto funkcie okna použiť na vykonávanie pokročilých funkcií.

Príprava množiny údajov

Môžete použiť VYTVORIŤ TABUĽKU vyhlásenie k vytvorte novú tabuľku v SQL. Tu je vzorový súbor údajov, ktorý táto príručka použije na definovanie niektorých funkcií okna:

Dátum objednávky

Kategória

Farba

Zľavnená cena

Množstvo

08-11-2016

Telefóny

čierna

907.152

6

12-06-2016

Spojivá

zelená

18.504

3

11-10-2015

Spotrebiče

žltá

114.9

5

11-10-2015

Tabuľky

Hnedá

1706.184

9

09-06-2014

Telefóny

Červená

911.424

4

09-06-2014

Papier

biely

15.552

3

09-06-2014

Spojivá

čierna

407.976

3

09-06-2014

Spotrebiče

žltá

68.81

5

09-06-2014

Spojivá

zelená

2.544

3

09-06-2014

Skladovanie

Oranžová

665.88

6

09-06-2014

Skladovanie

Oranžová

55.5

2

15-04-2017

Telefóny

čierna

213.48

3

05-12-2016

Spojivá

zelená

22.72

4

22-11-2015

Spotrebiče

zelená

60.34

7

22-11-2015

Stoličky

Tmavohnedá

71.372

2

13-05-2014

Nábytok

Oranžová

190.92

5

Vysvetlenie funkcie súčtu

Predpokladajme, že chcete vypočítať celkový predaj pre každú hodnotu v stĺpci kategórie. Môžete to urobiť takto:

VYBRAŤkategórii, farba,
suma (sale_price)
NAD (poradie podľa kategórie) AS celkový_predaj
OD sahil.vzorka;

Vo vyššie uvedenom kóde príkaz SQL vytiahne kategóriu a farbu z pôvodnej množiny údajov. Funkcia súčtu spočíta stĺpec sale_price. Robí to podľa kategórie, pretože klauzula OVER špecifikuje zoradenie podľa stĺpca kategórie. Konečný výsledok je nasledovný:

Ako používať funkciu okna Avg().

Podobne ako pri sumárnej funkcii môžete vypočítať priemer na riadok údajov pomocou priem funkciu. Namiesto súčtu získate stĺpec s priemernými tržbami.

VYBRAŤkategórii, farba,
priemer (akciová_cena)
NAD (zoradiť podľa kategórie) AS priem_predaj
OD sahil.vzorka;

Naučte sa používať funkciu okna Count().

Podobne ako funkcie sum a avg je funkcia okna počtu v SQL celkom jednoduchá a funguje rovnako ako ostatné dve funkcie. Keď prejdete funkciou počítania, získate celkový počet každej hodnoty v novom stĺpci.

Počet môžete vypočítať takto:

VYBRAŤkategórii, farba,
počet (kategória)
OVER (poradie podľa kategórie) AS item_count
OD sahil.vzorka;

Funkcia okna Row_Number().

Na rozdiel od niektorých iných funkcií okna uvedených vyššie, row_number() funguje trochu inak. Funkcia row_number() priraďuje číslo riadku každému riadku v závislosti od poradia podľa klauzuly. Číslo počiatočného riadku je 1; číslo riadku priraďuje zodpovedajúcu hodnotu každému riadku až do konca.

Tu je základná štruktúra funkcie row_number():

VYBRAŤkategórii, farba,
row_number()
NAD (poradie podľa kategórie) AS číslo_položky
OD sahil.vzorka;

Čo sa však stane, ak chcete každej položke kategórie priradiť samostatné čísla riadkov? Vyššie uvedená syntax nastavuje priebežné sériové číslo bez ohľadu na položky uložené v kategórii. Napríklad kategória spotrebičov by mala mať svoje výhradné číslovanie, za ktorým by mali nasledovať spojovacie prvky atď.

Môžete použiť oddiel na vykonanie tejto jednoduchej, ale praktickej úlohy. Kľúčové slovo oddielu priraďuje určené čísla riadkov na základe každej položky kategórie.

VYBRAŤkategórii, farba,
row_number()
NAD (rozdelenie podľa kategórie poradie podľa kategórie) AS číslo_položky
OD sahil.vzorka;

Funkcie Rank() a Dense_Rank().

The rank() funkcia funguje inak ako row_number() funkciu. Musíte zadať názov stĺpca v poradí podľa funkcie, aby ste ho mohli použiť ako základ na definovanie hodnôt poradia. Napríklad v nasledujúcom príklade kódu môžete použiť stĺpec farieb v poradí podľa funkcie. Dotaz potom použije toto poradie na priradenie hodnoty poradia každému riadku.

Na odovzdanie funkcie hodnotenia v SQL môžete použiť nižšie uvedenú syntax kódu:

VYBRAŤkategórii, farba,
rank()
NAD (poradie podľa farby) AS item_rank
OD sahil.vzorka;

Pozrite sa na výstup, aby ste pochopili, ako táto funkcia funguje.

Poradie podľa funkcie zoradí farebnú kategóriu, zatiaľ čo funkcia poradia priradí poradie každej farbe. Všetky rovnaké hodnoty farieb však majú rovnakú úroveň, zatiaľ čo rôzne farby majú samostatné úrovne. Čierna farba sa v súbore údajov vyskytuje trikrát; namiesto priradenia hodnoty hodnotenia 1, 2 a 3 získajú položky čiernej farby hodnotenie 1.

Nasledujúca hnedá farba však získa 4. miesto namiesto 2. Funkcia poradia preskočí hodnoty a priradí nasledujúcu chronologickú hodnotu rôznym položkám. Ak chcete priradiť zmysluplnejšiu hodnotu poradia, môžete použiť dense_rank() funkciu.

Funkcia dense_rank nepreskakuje žiadne hodnoty poradia počas zoradenia podľa funkcie. Napríklad prvé tri farebné predmety (čierna) budú mať hodnosť 1. Nasledujúca farba (hnedá) však nebude mať hodnosť 4, ale hodnosť 2, čo je nasledujúce chronologické číslo v zozname číslovania. Funkcia dense_rank je praktickejšia funkcia okna, pretože priraďuje zmysluplnú hodnotu zoznamu položiek.

Tu je návod, ako môžete použiť funkciu dense_rank v SQL:

VYBRAŤkategórii, farba,
dense_rank()
NAD (poradie podľa farby) AS item_rank
OD sahil.vzorka;

A tu je príklad toho, ako bude vyzerať výstup z tejto funkcie:

Funkcie SQL na záchranu

Funkcie okna SQL sú ideálne na vykonávanie pokročilých analytických operácií. Môžete však použiť množstvo ďalších príkazov SQL, aby ste sa uistili, že vaše výpočtové schopnosti sú špičkové. Keď skombinujete a vypočítate viacero výsledkov naraz, nie je nič lepšie ako použitie poddotazov SQL.

Čiastkové dotazy sú vynikajúcim nástrojom na vykonávanie pokročilých funkcií, ktoré zvyšujú kvalitu vašich výsledkov. V závislosti od potreby hodiny si môžete prispôsobiť svoje otázky a zefektívniť ich tak, aby vyhovovali vašim požiadavkám.