SQL OVER sąlyga

Sql Over Salyga



Viena iš pažangiausių SQL funkcijų yra OVER sąlyga. Tai funkcija, leidžianti atlikti skaičiavimus ir taikyti SQL lango funkcijas tam tikram eilučių poaibiui tam tikrame rezultatų rinkinyje.

Tai ypač naudinga, kai reikia apskaičiuoti eilučių grupių apibendrinimus arba reitingus nesutraukiant viso rezultatų rinkinio.

Prisijunkite prie šios pamokos, nes sužinome viską, ką reikia žinoti, kad galėtumėte pradėti dirbti su OVER sąlyga.







Reikalavimai:

Prieš pasinerdami į OVER sąlygos funkcionalumą ir veikimą, įsitikinkite, kad neturite SQL pagrindų. Taip pat manome, kad turite prieigą prie duomenų bazės, kurią galite naudoti norėdami patikrinti savo žinias.



Mūsų atveju MySQL duomenų bazę naudosime su Sakila pavyzdine duomenų baze. Tiesiog įsitikinkite, kad turite pakankamai teisių ir ar jūsų duomenų bazės variklis palaiko lango funkcijas.



Sintaksė:

Kaip minėjome anksčiau, daugeliu atvejų mes daugiausia naudojame sąlygą OVER kartu su lango funkcijomis.





Taigi sakinio sintaksę galime išreikšti taip:

(išraiška) OVER (

[SKYRIUS PAGAL skaidinio_reiškimą, ...]

[ORDER BY sort_expression [ASC | DESC], ...]

[frame_specifikacija]

)

Pateiktoje sintaksėje kiekvieną komponentą galime suskirstyti taip:



  1. – tai lango funkcija, kurią norime taikyti konkrečiame eilučių lange, pvz., SUM(), AVG(), ROW_NUMBER(), RANK ir kt.
  2. Išraiška – nurodomas stulpelis arba išraiška, kuriai taikoma lango funkcija.
  3. PARTITION BY – tai pasirenkama sąlyga, kuri padalija rezultatų rinkinį į skaidinius, kur kiekvienas skaidinys yra tarsi atskiras vienetas, kuriame taikoma funkcija. Tame pačiame skaidinyje esančios eilutės turi tos pačios reikšmės nurodytuose stulpeliuose.
  4. ORDER BY – nurodoma kiekvieno skaidinio eilučių apdorojimo tvarka.
  5. frame_specification – tai pasirenkama sąlyga, apibrėžianti skaidinio eilučių rėmą. Įprastos rėmo specifikacijos apima EILTELES TARP IR arba RANGE TARP IR

To nepaisydami, panagrinėkime keletą praktinių pavyzdžių, kaip jį naudoti.

Pavyzdys:

Leiskite mums parodyti, kaip naudoti sąlygą naudojant Sakila duomenų bazę. Apsvarstykite pavyzdį, kai turime nustatyti bendras kiekvienos filmų kategorijos pajamas.

Galime naudoti sumos lango funkciją su sąlyga OVER ir krūva sujungimo teiginių, kaip parodyta šiame pavyzdyje:

PASIRINKTI
kategorija.pavadinimas AS kategorijos_pavadinimas,
film.title AS filmo_title,
film.rental_rate,
SUMA(mokėjimo.suma) VIRŠKITE (SKYRIUS PAGAL kategoriją.pavadinimą) AS bendros_pajamos
NUO
filmas
PRISIJUNK
filmo_kategorija ĮJUNGTA
film.film_id = filmo_kategorija.filmo_id
PRISIJUNK
kategorija ĮJUNGTA
filmo_kategorija.kategorijos_id = category.category_id
PRISIJUNK
inventorius ĮJUNGTAS
film.film_id = inventorius.filmo_id
PRISIJUNK
nuoma ĮJUNGTA
inventorius.inventory_id = rental.inventory_id
PRISIJUNK
mokėjimas ĮJUNGTAS
rental.rental_id = mokėjimas.nuomos_id
RŪŠIUOTI PAGAL
kategorija.vardas,
filmas.pavadinimas;

Pateiktoje užklausoje pirmiausia pasirenkame filmo pavadinimą, nuomos tarifą ir naudojame išraišką suma (payment.amount over partition by category.name) norėdami nustatyti kiekvienos kategorijos skaidinio sumą pagal kategorijos pavadinimą.

Turime naudoti sąlygą PARTITION BY, kad užtikrintume, jog sumos apskaičiavimas būtų iš naujo pradėtas kiekvienoje unikalioje kategorijoje.

Gauta išvestis yra tokia:

Štai jūs tai turite!

Išvada

Šiame pavyzdyje išnagrinėjome darbo su OVER sąlyga SQL pagrindus. Tai nėra pagrindinė sąlyga ir reikalauja iš anksto susipažinti su kitomis SQL funkcijomis.