Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

SQL-i mitmekülgsus DBMS-i päringukeelena on aastate jooksul tõusnud. Selle laialdane kasulikkus ja mitmekülgsus muudavad selle iga andmeanalüütiku kõigi aegade lemmikuks.

Lisaks SQL-i tavalistele funktsioonidele on palju kõrgtaseme funktsioone. Neid funktsioone tuntakse tavaliselt aknafunktsioonidena. Kui tegelete keeruliste andmetega ja soovite teha täpsemaid arvutusi, saate neid kasutada oma andmete parimaks kasutamiseks.

Akna funktsioonide tähtsus

SQL-is on saadaval mitu aknafunktsiooni ja igaüks neist aitab teil arvutusi teha. Alates partitsioonide loomisest kuni ridade järjestamiseni või ridade numbrite määramiseni teevad need aknafunktsioonid natuke kõike.

Aknafunktsioonid on kasulikud, kui rakendate koondfunktsioone kindlale andmestikule või ridade kogumile. Need funktsioonid lähevad kaugemale GROUP BY pakutavatest liitmisfunktsioonidest. Peamine erinevus seisneb aga selles, et erinevalt rühmitamisfunktsioonist ei ühendata teie andmeid üheks reale.

instagram viewer

Te ei saa kasutada akna funktsioone KUS, FROM, ja GROUP BY avaldused.

Aknafunktsiooni süntaks

Kui viitate mõnele aknafunktsioonile, peate järgima vaikesüntaksi struktuuri, et see õigesti töötaks. Kui struktureerite käsu valesti, kuvatakse tõrketeade ja teie koodi käivitamine ebaõnnestub.

Siin on vaikesüntaks:

VALI veerunimi1,
{window_function}(veerunimi2)
OVER([PARTITION BY veerunimi1] [ORDER BY veerunimi3]) AS uus_veerg
FROM tabeli_nimi;

Kus:

  • veeru nimi1 on esimene veeru nimi, mille soovite valida.
  • {window_function} on koondfunktsiooni nimi, nagu summa, avg, count, rea_arv, järjestus või tihe_asetus.
  • veerunimi2 on selle veeru nimi, millele aknafunktsiooni rakendate.
  • veerunimi3 on kolmanda veeru nimi, mis moodustab partitsiooni aluse.
  • uus_veerg on uue veeru silt, mille saate rakendada kasutades AS märksõna.
  • tabeli_nimi on lähtetabeli nimi.

Akna funktsioonid erinevad mõnest kõige elementaarsemad SQL-käsud. Erinevalt SQL-i koondfunktsioonidest saate neid aknafunktsioone kasutada täpsemate funktsioonide täitmiseks.

Andmestiku ettevalmistamine

Võite kasutada LOO TABEL avaldus looge SQL-is uus tabel. Siin on näidisandmekogum, mida see juhend kasutab mõne aknafunktsiooni määratlemiseks.

Tellimuse kuupäev

Kategooria

Värv

Müügihind

Kogus

08-11-2016

Telefonid

Must

907.152

6

12-06-2016

Sideained

Roheline

18.504

3

11-10-2015

Seadmed

Kollane

114.9

5

11-10-2015

Tabelid

Pruun

1706.184

9

09-06-2014

Telefonid

Punane

911.424

4

09-06-2014

Paber

Valge

15.552

3

09-06-2014

Sideained

Must

407.976

3

09-06-2014

Seadmed

Kollane

68.81

5

09-06-2014

Sideained

Roheline

2.544

3

09-06-2014

Säilitamine

Oranž

665.88

6

09-06-2014

Säilitamine

Oranž

55.5

2

15-04-2017

Telefonid

Must

213.48

3

05-12-2016

Sideained

Roheline

22.72

4

22-11-2015

Seadmed

Roheline

60.34

7

22-11-2015

Toolid

Tumepruun

71.372

2

13-05-2014

Mööbel

Oranž

190.92

5

Summafunktsiooni selgitus

Oletame, et soovite arvutada kategooria veerus oleva iga väärtuse kogumüügi. Seda saate teha järgmiselt.

VALIkategooria, värv,
summa (müügihind)
ÜLE (järjestus kategooria järgi) AS kokku_müük
FROM sahil.sample;

Ülaltoodud koodis tõmbab SQL-lause kategooria ja värvi algsest andmekogumist. Summafunktsioon liidab veeru müügihind. Seda tehakse kategooriate kaupa, kuna OVER-klausel määrab järjestuse kategooria veeru järgi. Lõpptulemus on järgmine:

Kuidas kasutada akna funktsiooni Avg()

Sarnaselt summafunktsiooniga saate arvutada andmerea keskmise väärtuse keskm funktsiooni. Summa asemel saate veeru keskmise müügiga.

VALIkategooria, värv,
keskmine (müügihind)
OVER (järjestus kategooria järgi) AS avg_sales
FROM sahil.sample;

Õppige kasutama Count() akna funktsiooni

Sarnaselt summa ja avg funktsioonidele on loendusakna funktsioon SQL-is üsna lihtne ja töötab samadel joontel kui ülejäänud kaks funktsiooni. Loendusfunktsiooni läbimisel saate uue veeru iga väärtuse koguarvu.

Saate arvu arvutada järgmiselt.

VALIkategooria, värv,
arv (kategooria)
OVER (järjestus kategooria järgi) AS üksuste_arv
FROM sahil.sample;

Row_Number() akna funktsioon

Erinevalt mõnest teisest ülaltoodud aknafunktsioonist töötab rida_number() veidi teisiti. Funktsioon row_number() määrab igale reale reanumbri, sõltuvalt järjestusest klausli järgi. Algrea number on 1; rea_number määrab igale reale kuni lõpuni vastava väärtuse.

Siin on funktsiooni row_number() põhistruktuur:

VALIkategooria, värv,
rea_number()
ÜLE (järjestus kategooria järgi) AS kauba_number
FROM sahil.sample;

Aga mis juhtub, kui soovite igale kategooriaüksusele määrata eraldi reanumbrid? Ülaltoodud süntaks määrab jooksva seerianumbri, olenemata kategooriasse salvestatud üksustest. Näiteks seadmete kategoorial peaks olema eksklusiivne nummerdamine, millele järgneb sideained ja nii edasi.

Võite kasutada vahesein selle lihtsa, kuid praktilise ülesande täitmiseks. Jaotuse märksõna määrab iga kategooriaüksuse alusel määratud reanumbrid.

VALIkategooria, värv,
rea_number()
OVER (jaotis kategooria järgi järjestus kategooria järgi) AS üksuse_number
FROM sahil.sample;

Funktsioonid Rank() ja Dense_Rank().

The koht() funktsioon töötab erinevalt rea_number() funktsiooni. Peate määrama veeru nime järjestuses funktsioonide kaupa, et kasutada seda auastme väärtuste määratlemise alusena. Näiteks järgmises koodinäites saate funktsioonide kaupa järjestuse piires kasutada värviveergu. Seejärel kasutab päring seda järjekorda igale reale järjestuse määramiseks.

Saate SQL-is auastmefunktsiooni edastamiseks kasutada allolevat koodisüntaksit.

VALIkategooria, värv,
koht()
ÜLE (järjesta värvi järgi) AS item_rank
FROM sahil.sample;

Selle funktsiooni toimimise mõistmiseks vaadake väljundit.

Funktsioonide järgi järjestamine sorteerib värvikategooria, samas kui järjestuse funktsioon määrab igale värvile järjestuse. Kõigil samadel värviväärtustel on aga sama auaste, samas kui erinevatel värvidel on eraldi auastmed. Must värv esineb andmekogus kolm korda; 1., 2. ja 3. järgu väärtuse määramise asemel saavad musta värvi elemendid järgu 1.

Järgmine värv Brown saab aga 2. järgu asemel 4. Järjestusfunktsioon jätab väärtused vahele ja määrab erinevatele kirjetele järgmise kronoloogilise väärtuse. Kui soovite määrata tähendusrikkama järgu väärtuse, võite kasutada tihe_aste() funktsiooni.

Funktsioon dense_rank ei jäta funktsiooni järgi järjestamise ajal vahele ühtegi järjestuse väärtust. Näiteks kolm esimest värviüksust (must) on 1. kohal. Järgmisel värvil (pruun) ei ole aga auaste 4, vaid auaste 2, mis on numeratsiooniloendis järgmine kronoloogiline number. Funktsioon dense_rank on praktilisem aknafunktsioon, kuna see määrab üksuste loendile tähendusliku väärtuse.

Funktsiooni dense_rank SQL-is saate kasutada järgmiselt.

VALIkategooria, värv,
tihe_aste()
ÜLE (järjesta värvi järgi) AS item_rank
FROM sahil.sample;

Ja siin on näide sellest, kuidas selle funktsiooni väljund välja näeb:

SQL-i funktsioonid päästmiseks

SQL-i aknafunktsioonid on ideaalsed täiustatud analüütiliste toimingute tegemiseks. Siiski saate kasutada palju muid SQL-i käske, et tagada oma arvutusoskused tipptasemel. Kui kombineerite ja arvutate korraga mitu tulemust, pole midagi paremat kui SQL-i alampäringute kasutamine.

Alampäringud on suurepärane tööriist täiustatud funktsioonide täitmiseks, mis parandavad teie tulemuste kvaliteeti. Sõltuvalt tunni vajadusest saate oma päringuid kohandada ja oma vajadustele vastavaks muuta.