SQL OVER klausel

Sql Over Klausel



Üks SQL-i kõige arenenumaid funktsioone on OVER-klausel. See on funktsioon, mis võimaldab meil teha arvutusi ja rakendada SQL-akna funktsioone antud tulemuskomplekti teatud ridade alamhulgale.

See on eriti kasulik, kui peate arvutama ridade rühmade liite või paremusjärjestusi ilma kogu tulemuste komplekti ahendamata.

Liituge meiega selles õpetuses, sest me õpime kõike, mida on vaja teada, et saaksite alustada tööd OVER-klausliga.







Nõuded:

Enne kui sukeldume OVER-klausli funktsionaalsusesse ja toimimisse, veenduge, et teil on SQL-i põhitõed eemal. Samuti eeldame, et teil on juurdepääs andmebaasile, mida saate oma teadmiste kontrollimiseks kasutada.



Meie puhul kasutame MySQL andmebaasi koos Sakila näidisandmebaasiga. Lihtsalt veenduge, et teil on piisavad õigused ja et teie andmebaasi mootor toetab akna funktsioone.



Süntaks:

Nagu varem mainisime, kasutame enamasti OVER-klauslit koos aknafunktsioonidega.





Sellisena saame lause süntaksi väljendada järgmiselt:

(avaldis) ÜLE (

[PARTITSIOON partitsiooni_avaldise järgi, ...]

[ORDER BY sorti_avaldise järgi [ASC | DESC], ...]

[raami_spetsifikatsioon]

)

Antud süntaksis saame iga komponendi jaotada järgmiselt:



  1. – see viitab aknafunktsioonile, mida soovime konkreetsele ridade aknale rakendada, näiteks SUM(), AVG(), ROW_NUMBER(), RANK jne.
  2. Avaldis – see määrab veeru või avaldise, millele aknafunktsiooni rakendatakse.
  3. PARTITION BY – see on valikuline klausel, mis jagab tulemuskomplekti partitsioonideks, kus iga partitsioon on nagu eraldi üksus, kus funktsioon rakendatakse. Samas partitsioonis olevad read jagavad määratud veergudes samu väärtusi.
  4. ORDER BY – see määrab iga partitsiooni ridade töötlemise järjekorra.
  5. frame_specification – see on valikuline klausel, mis määrab partitsiooni ridade raami. Levinud raami spetsifikatsioonid hõlmavad ROWS BETWEEN AND või RANGE BETWEEN JA

Kui see on kõrvale jäänud, uurime mõningaid praktilisi näiteid selle kasutamise kohta.

Näide:

Näitame Sakila näidisandmebaasi abil, kuidas klauslit kasutada. Vaatleme näidet, kus peame määrama iga filmikategooria kogutulu.

Saame kasutada summaakna funktsiooni koos OVER-klausli ja hulga liitumislausetega, nagu on näidatud järgmises näites:

VALI
kategooria.nimi AS kategooria_nimi,
film.title AS film_title,
film.rental_rate,
SUM(makse.summa) ÜLE (JAOTIS kategooria.nimi) AS kogu_tulu
FROM
film
LIITU
filmi_kategooria ON
film.filmi_id = filmi_kategooria.filmi_id
LIITU
kategooria ON
filmi_kategooria.kategooria_id = kategooria.kategooria_id
LIITU
inventar ON
film.filmi_id = inventar.filmi_id
LIITU
rent ON
inventar.inventory_id = rental.inventory_id
LIITU
makse ON
rent.rendi_id = makse.rendi_id
TELLI
kategooria.nimi,
film.title;

Antud päringus valime alustuseks filmi pealkirja, renditariifi ja kasutame avaldist summa (makse.summa partitsiooni järgi kategooria.nimi järgi), et määrata iga kategooria jaotuse summa kategooria nime järgi.

Peame kasutama klauslit PARTITION BY tagamaks, et summa arvutamist alustatakse uuesti iga kordumatu kategoorias.

Saadud väljund on järgmine:

Siin on see!

Järeldus

Selles näites uurisime SQL-i OVER-klausliga töötamise põhialuseid. See ei ole põhiklausel ja nõuab eelnevat tutvumist teiste SQL-i funktsioonidega.