Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Vsestranskost SQL kot poizvedovalnega jezika DBMS se je z leti povečala. Zaradi svoje obsežne uporabnosti in vsestranskosti je vedno priljubljen za vsakega analitika podatkov.

Obstaja kar nekaj naprednih funkcij poleg običajnih SQL. Te funkcije so splošno znane kot okenske funkcije. Če imate opravka s kompleksnimi podatki in želite izvesti napredne izračune, jih lahko uporabite za najboljšo uporabo svojih podatkov.

Pomen okenskih funkcij

V SQL je na voljo več okenskih funkcij in vsaka vam bo pomagala izvesti niz izračunov. Od ustvarjanja particij do razvrščanja vrstic ali dodeljevanja številk vrstic, te okenske funkcije naredijo vse po malem.

Okenske funkcije so koristne, ko agregatne funkcije uporabljate nad določenim naborom podatkov ali zbirko vrstic. Te funkcije presegajo funkcije združevanja, ki jih nudi GROUP BY. Vendar je glavna razlika v tem, da za razliko od funkcije združevanja vaši podatki niso združeni v eno vrstico.

Ne morete uporabljati okenskih funkcij znotraj KJE, OD, in ZDRUŽI PO izjave.

Sintaksa okenske funkcije

Ko se sklicujete na katero koli okensko funkcijo, morate slediti privzeti strukturi sintakse, da bo delovala pravilno. Če ukaz strukturirate nepravilno, se prikaže napaka in vaša koda se ne bo zagnala.

Tukaj je privzeta sintaksa:

IZBERI ime stolpca1,
{window_function}(imestolpca2)
NAD ([PARTICIJA PO imenu stolpca1] [ORDER PO imenu stolpca3]) KOT nov_stolpec
FROM ime_tabele;

Kje:

  • ime stolpca1 je prvo ime stolpca, ki ga želite izbrati.
  • {window_function} je ime agregatne funkcije, kot je sum, avg, count, row_number, rank ali dense_rank.
  • ime stolpca2 je ime stolpca, v katerem uporabljate okensko funkcijo.
  • ime stolpca3 je tretje ime stolpca, ki bo osnova za particijo.
  • nov_stolpec je oznaka za nov stolpec, ki ga lahko uporabite z uporabo AS ključna beseda.
  • ime_tabele je ime izvorne tabele.

Funkcije oken se razlikujejo od nekaterih najbolj osnovnih ukazov SQL. Za razliko od agregatnih funkcij v SQL lahko te okenske funkcije uporabite za izvajanje naprednih funkcij.

Priprava nabora podatkov

Lahko uporabite USTVARI TABELO izjava za ustvarite novo tabelo v SQL. Tukaj je vzorčni nabor podatkov, ki ga bo ta vodnik uporabil za definiranje nekaterih okenskih funkcij:

Datum naročila

Kategorija

barva

Prodajna cena

Količina

08-11-2016

telefoni

Črna

907.152

6

12-06-2016

Veziva

Zelena

18.504

3

11-10-2015

Aparati

Rumena

114.9

5

11-10-2015

Mize

rjav

1706.184

9

09-06-2014

telefoni

rdeča

911.424

4

09-06-2014

Papir

Bela

15.552

3

09-06-2014

Veziva

Črna

407.976

3

09-06-2014

Aparati

Rumena

68.81

5

09-06-2014

Veziva

Zelena

2.544

3

09-06-2014

Shranjevanje

Oranžna

665.88

6

09-06-2014

Shranjevanje

Oranžna

55.5

2

15-04-2017

telefoni

Črna

213.48

3

05-12-2016

Veziva

Zelena

22.72

4

22-11-2015

Aparati

Zelena

60.34

7

22-11-2015

Stoli

Temno rjava

71.372

2

13-05-2014

Pohištvo

Oranžna

190.92

5

Razlaga funkcije vsote

Recimo, da želite izračunati skupno prodajo za vsako vrednost v stolpcu kategorije. Takole lahko to storite:

IZBERIkategorijo, barva,
vsota (prodajna_cena)
OVER (razvrsti po kategoriji) AS total_sales
IZ sahil.vzorec;

V zgornji kodi stavek SQL potegne kategorijo in barvo iz izvirnega nabora podatkov. Funkcija sum sešteje stolpec sale_price. To stori glede na kategorijo, saj klavzula OVER določa razvrščanje po stolpcu kategorije. Končni rezultat je naslednji:

Kako uporabljati okensko funkcijo Avg().

Tako kot pri funkciji vsote lahko izračunate povprečje na vrstico podatkov z povpr funkcijo. Namesto vsote boste dobili stolpec s povprečno prodajo.

IZBERIkategorijo, barva,
povprečje (prodajna_cena)
OVER (razvrsti po kategoriji) AS avg_sales
IZ sahil.vzorec;

Naučite se uporabljati okensko funkcijo Count().

Podobno kot funkciji sum in avg je funkcija okna za štetje v SQL precej enostavna in deluje na enak način kot drugi dve funkciji. Ko posredujete funkcijo štetja, dobite skupno število vsake vrednosti v novem stolpcu.

Število lahko izračunate tako:

IZBERIkategorijo, barva,
štetje (kategorija)
OVER (razvrsti po kategoriji) AS item_count
IZ sahil.vzorec;

Okenska funkcija Row_Number().

Za razliko od nekaterih drugih okenskih funkcij, navedenih zgoraj, row_number() deluje nekoliko drugače. Funkcija row_number() vsaki vrstici dodeli številko vrstice, odvisno od vrstnega reda po členu. Začetna številka vrstice je 1; row_number vsaki vrstici do konca dodeli ustrezno vrednost.

Tukaj je osnovna struktura funkcije row_number():

IZBERIkategorijo, barva,
številka_vrstice()
NAD (razvrsti po kategoriji) AS item_number
IZ sahil.vzorec;

Toda kaj se zgodi, če želite vsakemu elementu kategorije dodeliti ločene številke vrstic? Zgornja sintaksa nastavi tekočo serijsko številko, ne glede na elemente, shranjene v kategoriji. Na primer, kategorija aparatov bi morala imeti svoje izključno oštevilčenje, ki bi mu sledili registratorji in tako naprej.

Lahko uporabite particija funkcijo za opravljanje te preproste, a praktične naloge. Ključna beseda particije dodeli določene številke vrstic na podlagi vsake postavke kategorije.

IZBERIkategorijo, barva,
številka_vrstice()
OVER (razdelitev po kategoriji, vrstni red po kategoriji) AS item_number
IZ sahil.vzorec;

Funkciji Rank() in Dense_Rank().

The uvrstitev () funkcija deluje drugače kot številka_vrstice() funkcijo. V vrstnem redu po funkciji morate določiti ime stolpca, da ga uporabite kot osnovo za definiranje vrednosti ranga. Na primer, v naslednjem primeru kode lahko uporabite barvni stolpec znotraj vrstnega reda po funkciji. Poizvedba bo nato uporabila ta vrstni red za dodelitev vrednosti ranga vsaki vrstici.

Spodnjo sintakso kode lahko uporabite za posredovanje funkcije rangiranja v SQL:

IZBERIkategorijo, barva,
uvrstitev ()
OVER (razvrsti po barvi) AS item_rank
IZ sahil.vzorec;

Oglejte si izhod, da boste razumeli, kako ta funkcija deluje.

Vrstni red po funkciji razvrsti barvno kategorijo, medtem ko funkcija ranga vsaki barvi dodeli rang. Vendar imajo vse iste barvne vrednosti enak rang, medtem ko imajo različne barve ločene range. Črna barva se v naboru podatkov pojavi trikrat; namesto dodelitve vrednosti ranga 1, 2 in 3 dobijo elementi črne barve rang 1.

Vendar pa naslednja barva, rjava, namesto stopnje 2 dobi stopnjo 4. Funkcija ranga preskoči vrednosti in različnim vnosom dodeli naslednjo kronološko vrednost. Če želite dodeliti bolj smiselno vrednost ranga, lahko uporabite dense_rank() funkcijo.

Funkcija dense_rank med vrstnim redom po funkciji ne preskoči nobene vrednosti ranga. Na primer, prvi trije barvni predmeti (črna) bodo imeli rang 1. Vendar pa naslednja barva (rjava) ne bo imela ranga 4, ampak rang 2, ki je naslednja kronološka številka na seznamu oštevilčevanja. Funkcija dense_rank je bolj praktična okenska funkcija, saj seznamu elementov dodeli pomembno vrednost.

Tukaj je opisano, kako lahko uporabite funkcijo dense_rank v SQL:

IZBERIkategorijo, barva,
dense_rank()
OVER (razvrsti po barvi) AS item_rank
IZ sahil.vzorec;

In tukaj je primer, kako bo videti rezultat te funkcije:

Funkcije SQL na pomoč

Okenske funkcije SQL so idealne za izvajanje naprednih analitičnih operacij. Vendar pa lahko uporabite veliko drugih ukazov SQL, da zagotovite, da so vaše računalniške sposobnosti vrhunske. Ko združite in izračunate več rezultatov naenkrat, ni nič boljšega od uporabe podpoizvedb SQL.

Podpoizvedbe so odlično orodje za izvajanje naprednih funkcij, ki izboljšujejo kakovost rezultatov. Glede na trenutne potrebe lahko prilagodite svoje poizvedbe in jih naredite učinkovitejše, da ustrezajo vašim zahtevam.