Se on erityisen hyödyllinen, kun sinun on laskettava riviryhmien aggregaatiot tai sijoitukset ilman, että koko tulosjoukkoa kutistetaan.
Liity meihin tässä opetusohjelmassa, kun opimme kaiken siitä, mitä sinun on tiedettävä, jotta pääset alkuun OVER-lausekkeen kanssa.
Vaatimukset:
Ennen kuin sukeltaamme OVER-lauseen toimivuuteen ja toimintaan, varmista, että sinulla on SQL:n perusteet poissa tieltä. Oletamme myös, että sinulla on pääsy tietokantaan, jonka avulla voit testata tietosi.
Meidän tapauksessamme käytämme MySQL-tietokantaa Sakilan mallitietokannan kanssa. Varmista vain, että sinulla on riittävät käyttöoikeudet ja että tietokantamoottorisi tukee ikkunatoimintoja.
Syntaksi:
Kuten aiemmin mainitsimme, useimmissa tapauksissa käytämme pääasiassa OVER-lausetta ikkunatoimintojen yhteydessä.
Sellaisenaan voimme ilmaista lauseen syntaksin seuraavasti:
[PARTITION BY osion_lauseke, ...]
[ORDER BY lajittelulauseke [ASC | DESC], ...]
[frame_specifikaatio]
)
Annetussa syntaksissa voimme jakaa jokaisen komponentin seuraavasti:
-
– Se viittaa ikkunatoimintoon, jota haluamme käyttää tietyssä riviikkunassa, kuten SUM(), AVG(), ROW_NUMBER(), RANK jne. - Lauseke – Tämä määrittää sarakkeen tai lausekkeen, jolle ikkunatoimintoa käytetään.
- PARTITION BY – Tämä on valinnainen lauseke, joka jakaa tulosjoukon osioihin, joissa jokainen osio on kuin erillinen yksikkö, jossa toimintoa käytetään. Saman osion riveillä on samat arvot määritetyissä sarakkeissa.
- ORDER BY – Tämä määrittää järjestyksen, jossa kunkin osion rivit käsitellään.
- frame_specification – Tämä on valinnainen lauseke, joka määrittää osion rivien kehyksen. Yleisiä kehysmäärityksiä ovat ROWS BETWEEN
AND tai RANGE BETWEEN AND
Kun se on poissa tieltä, tutkikaamme joitain käytännön esimerkkejä sen käytöstä.
Esimerkki:
Esitellään lauseen käyttöä Sakilan mallitietokannan avulla. Harkitse esimerkkiä, jossa meidän on määritettävä kunkin elokuvaluokan kokonaistulot.
Voimme käyttää summa-ikkunatoimintoa OVER-lauseen ja joukon liitoslausekkeiden kanssa seuraavan esimerkin mukaisesti:
VALITSEkategoria.nimi AS luokan_nimi,
film.title AS film_title,
film.rental_rate,
SUMMA(maksu.summa) YLI (OSIO luokan.nimen mukaan) AS kokonaistuotto
FROM
elokuva
LIITTYÄ SEURAAN
film_category PÄÄLLÄ
film.film_id = film_category.film_id
LIITTYÄ SEURAAN
luokka PÄÄLLÄ
film_category.category_id = luokka.luokkatunnus
LIITTYÄ SEURAAN
varasto PÄÄLLÄ
film.film_id = inventory.film_id
LIITTYÄ SEURAAN
vuokraus PÄÄLLÄ
inventory.inventory_id = vuokra.varastotunnus
LIITTYÄ SEURAAN
maksu PÄÄLLÄ
vuokra.vuokratunnus = maksu.vuokratunnus
TILAA
Kategorian nimi,
film.title;
Aluksi annetussa kyselyssä valitsemme elokuvan nimen, vuokrahinnan ja käytämme lauseketta summa (maksu.summa osion yli kategorian.nimi) määrittääksemme kunkin luokkaosion summan luokan nimen perusteella.
Meidän on käytettävä PARTITION BY -lausetta varmistaaksemme, että summan laskenta alkaa uudelleen jokaisessa yksilöllisessä kategoriassa.
Tuloksena oleva tulos on seuraava:
Siinä se on!
Johtopäätös
Tässä esimerkissä tutkimme SQL:n OVER-lauseen kanssa työskentelyn perusteita. Tämä ei ole peruslauseke ja vaatii aiempaa perehtymistä muihin SQL-ominaisuuksiin.