SQL OVER-klausul

Sql Over Klausul



En af de mest avancerede funktioner i SQL er OVER-klausulen. Det er en funktion, der giver os mulighed for at udføre beregningerne og anvende SQL-vinduefunktionerne over en specifik delmængde af rækker inden for et givet resultatsæt.

Det er især nyttigt, når du skal beregne aggregeringer eller rangeringer for grupper af rækker uden faktisk at skjule hele resultatsættet.

Slut dig til os i denne tutorial, da vi lærer alt om, der er at vide, for at få dig i gang med at arbejde med OVER-klausulen.







Krav:

Før vi dykker ned i funktionaliteten og virkemåden af ​​OVER-klausulen, skal du sikre dig, at du har det grundlæggende i SQL af vejen. Vi forudsætter også, at du har adgang til en database, som du kan bruge til at teste din viden.



I vores tilfælde vil vi bruge MySQL-databasen med Sakila-eksempeldatabasen. Bare sørg for, at du har tilstrækkelige tilladelser, og at din databasemotor understøtter vinduesfunktionerne.



Syntaks:

Som vi nævnte tidligere, bruger vi i de fleste tilfælde hovedsageligt OVER-sætningen i forbindelse med vinduesfunktionerne.





Som sådan kan vi udtrykke syntaksen af ​​klausulen som følger:

(udtryk) OVER (

[PARTITION BY partition_expression, ...]

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

[frame_specification]

)

I den givne syntaks kan vi opdele hver komponent som følger:



  1. – Det refererer til den vinduesfunktion, som vi ønsker at anvende over et bestemt vindue af rækker såsom SUM(), AVG(), ROW_NUMBER(), RANK osv.
  2. Udtryk – Dette angiver en kolonne eller et udtryk, som vinduesfunktionen anvendes til.
  3. PARTITION BY – Dette er en valgfri klausul, der opdeler resultatsættet i partitioner, hvor hver partition er som en separat enhed, hvor funktionen anvendes. Rækker inden for den samme partition deler de samme værdier i de angivne kolonner.
  4. ORDER BY – Dette angiver rækkefølgen, som rækkerne i hver partition behandles i.
  5. frame_specification – Dette er en valgfri klausul, der definerer rammen af ​​rækker i partitionen. Almindelige rammespecifikationer omfatter RÆKKER MELLEM OG eller RANGE MELLEM OG

Med det af vejen, lad os undersøge nogle praktiske eksempler på, hvordan man bruger det.

Eksempel:

Lad os demonstrere, hvordan man bruger klausulen ved hjælp af Sakila-eksempeldatabasen. Overvej et eksempel, hvor vi skal bestemme den samlede omsætning for hver filmkategori.

Vi kan bruge sum-vinduefunktionen med OVER-sætningen og en masse join-sætninger som vist i følgende eksempel:

VÆLG
kategori.navn AS kategorinavn,
film.title AS film_titel,
film.rental_rate,
SUM(betaling.beløb) OVER (OPDELING EFTER kategori.navn) SOM total_omsætning
FRA
film
TILSLUTTE
filmkategori TIL
film.film_id = film_kategori.film_id
TILSLUTTE
kategori TIL
film_category.category_id = category.category_id
TILSLUTTE
inventar TIL
film.film_id = inventory.film_id
TILSLUTTE
udlejning TIL
inventory.inventory_id = leje.inventory_id
TILSLUTTE
betaling TIL
leje.leje_id = betaling.leje_id
BESTIL EFTER
kategori.navn,
film.title;

I den givne forespørgsel starter vi med at vælge filmens titel, lejeprisen og bruger udtrykket sum (betaling.beløb over partition efter kategori.navn) til at bestemme summen af ​​hver kategoriopdeling ved kategorinavnet.

Vi skal bruge PARTITION BY-klausulen for at sikre, at beregningen af ​​summen genstarter ved hver unik kategori.

Det resulterende output er som følger:

Der har du det!

Konklusion

I dette eksempel undersøgte vi det grundlæggende ved at arbejde med OVER-sætningen i SQL. Dette er ikke en grundlæggende klausul og kræver tidligere kendskab til andre SQL-funktioner.