Ez különösen akkor hasznos, ha a sorcsoportok összesítését vagy rangsorolását kell kiszámítani anélkül, hogy a teljes eredménykészletet össze kellene csukni.
Csatlakozzon hozzánk ebben az oktatóanyagban, hiszen mindent megtudunk arról, amit tudni kell ahhoz, hogy elkezdhesse dolgozni az OVER záradékkal.
Követelmények:
Mielőtt belevetnénk magunkat az OVER záradék funkcionalitásába és működésébe, győződjön meg arról, hogy az SQL alapjai nincsenek az útból. Feltételezzük továbbá, hogy hozzáfér egy adatbázishoz, amellyel tesztelheti tudását.
Esetünkben a MySQL adatbázist fogjuk használni a Sakila mintaadatbázissal. Csak győződjön meg arról, hogy rendelkezik elegendő jogosultsággal, és az adatbázismotor támogatja az ablakfunkciókat.
Szintaxis:
Mint korábban említettük, a legtöbb esetben az OVER záradékot használjuk az ablak függvényekkel együtt.
Mint ilyen, a következőképpen fejezhetjük ki a záradék szintaxisát:
[PARTÍCIÓ SZERINT partíciókifejezés, ...]
[ORDER BY rendezési_kifejezés [ASC | DESC], ...]
[frame_specifikáció]
)
Az adott szintaxisban az egyes komponenseket a következőképpen bonthatjuk fel:
-
– Arra az ablakfüggvényre utal, amelyet egy adott sorablakra szeretnénk alkalmazni, például SUM(), AVG(), ROW_NUMBER(), RANK stb. - Kifejezés – Megadja azt az oszlopot vagy kifejezést, amelyre az ablakfüggvény vonatkozik.
- PARTITION BY – Ez egy opcionális záradék, amely az eredményhalmazt partíciókra osztja, ahol minden partíció olyan, mint egy külön egység, ahol a függvényt alkalmazzák. Az azonos partíción belüli sorok ugyanazokat az értékeket osztják meg a megadott oszlopokban.
- ORDER BY – Meghatározza az egyes partíciókban lévő sorok feldolgozási sorrendjét.
- frame_specification – Ez egy opcionális záradék, amely meghatározza a partíción belüli sorok keretét. Az általános keretspecifikációk közé tartozik a ROWS BETWEEN
AND vagy a RANGE BETWEEN AND .
Ha ez nem megy, nézzünk meg néhány gyakorlati példát a használatára.
Példa:
Mutatjuk be a záradék használatát a Sakila mintaadatbázis segítségével. Vegyünk egy példát, ahol meg kell határoznunk az egyes filmkategóriák összbevételét.
Használhatjuk az összeg ablak függvényt az OVER záradékkal és egy csomó csatlakozási utasítással, amint az a következő példában látható:
KIVÁLASZTÁSkategória.név AS kategória_név,
film.title AS film_title,
film.rental_rate,
SUM(fizetés.összeg) TÚL (PARTÍCIÓ kategória.név SZERINT) AS teljes_bevétel
TÓL TŐL
film
CSATLAKOZIK
film_category BE
film.film_id = film_category.film_id
CSATLAKOZIK
kategória BE
film_category.category_id = kategória.kategória_azonosítója
CSATLAKOZIK
készlet BE
film.film_id = inventory.film_id
CSATLAKOZIK
bérlet BE
inventory.inventory_id = rental.inventory_id
CSATLAKOZIK
fizetés BE
rental.rental_id = fizetés.bérleti_azonosító
RENDEZÉS
kategória név,
film cím;
Az adott lekérdezésben a film címének, bérleti díjának kiválasztásával kezdjük, és a sum (payment.amount over partition by category.name) kifejezést használva meghatározzuk az egyes kategóriák felosztásának összegét a kategória neve alapján.
A PARTITION BY záradékot kell használnunk annak biztosítására, hogy az összeg kiszámítása minden egyedi kategóriában újrainduljon.
A kapott kimenet a következő:
Tessék, itt van!
Következtetés
Ebben a példában megvizsgáltuk az SQL OVER záradékkal való munkavégzés alapjait. Ez nem egy alapvető záradék, és más SQL-szolgáltatások előzetes ismeretét igényli.