Det er spesielt nyttig når du trenger å beregne aggregeringene eller rangeringene for grupper av rader uten å skjule hele resultatsettet.
Bli med oss i denne opplæringen mens vi lærer alt om det er å vite for å komme i gang med OVER-klausulen.
Krav:
Før vi dykker ned i funksjonaliteten og virkemåten til OVER-klausulen, sørg for at du har det grunnleggende om SQL ute av veien. Vi forutsetter også at du har tilgang til en database som du kan bruke til å teste ut kunnskapen din.
I vårt tilfelle vil vi bruke MySQL-databasen med Sakila-eksempeldatabasen. Bare sørg for at du har tilstrekkelige tillatelser og at databasemotoren din støtter vindusfunksjonene.
Syntaks:
Som vi nevnte tidligere, bruker vi i de fleste tilfeller hovedsakelig OVER-leddet i forbindelse med vindusfunksjonene.
Som sådan kan vi uttrykke syntaksen til klausulen som følger:
[PARTITION BY partition_expression, ...]
[ORDER BY sort_expression [ASC | DESC], ...]
[ramme_spesifikasjon]
)
I den gitte syntaksen kan vi bryte ned hver komponent som følger:
-
– Det refererer til vindusfunksjonen som vi ønsker å bruke over et spesifikt vindu med rader som SUM(), AVG(), ROW_NUMBER(), RANK, etc. - Uttrykk – Dette spesifiserer en kolonne eller et uttrykk som vindusfunksjonen brukes for.
- PARTITION BY – Dette er en valgfri klausul som deler resultatsettet inn i partisjoner der hver partisjon er som en separat enhet der funksjonen brukes. Rader innenfor samme partisjon deler de samme verdiene i de angitte kolonnene.
- ORDER BY – Dette spesifiserer rekkefølgen som radene i hver partisjon behandles i.
- frame_specification – Dette er en valgfri klausul som definerer rammen av rader i partisjonen. Vanlige rammespesifikasjoner inkluderer RADER MELLOM
OG eller RANGE MELLOM OG
Med det ute av veien, la oss utforske noen praktiske eksempler på hvordan du bruker det.
Eksempel:
La oss demonstrere hvordan du bruker klausulen ved å bruke Sakila-eksempeldatabasen. Tenk på et eksempel der vi må bestemme den totale inntekten for hver filmkategori.
Vi kan bruke sum-vindusfunksjonen med OVER-leddet og en haug med join-setninger som vist i følgende eksempel:
PLUKKE UTkategori.navn AS kategorinavn,
film.title AS film_tittel,
film.rental_rate,
SUM(betaling.beløp) OVER (DELING ETTER kategori.navn) SOM total_inntekt
FRA
film
BLI MED
filmkategori PÅ
film.film_id = filmkategori.film_id
BLI MED
kategori PÅ
film_category.category_id = category.category_id
BLI MED
inventar PÅ
film.film_id = inventory.film_id
BLI MED
utleie PÅ
inventory.inventory_id = rental.inventory_id
BLI MED
betaling PÅ
rental.rental_id = payment.rental_id
REKKEFØLGE ETTER
kategori navn,
film.tittel;
I den gitte spørringen starter vi med å velge filmtittel, leiepris, og bruker sum (betaling.beløp over partisjon etter kategori.navn) uttrykket for å bestemme summen av hver kategoripartisjon ved kategorinavnet.
Vi må bruke PARTITION BY-klausulen for å sikre at beregningen av summen starter på nytt ved hver unike kategori.
Den resulterende utgangen er som følger:
Der har du det!
Konklusjon
I dette eksemplet utforsket vi det grunnleggende om å jobbe med OVER-leddet i SQL. Dette er ikke en grunnleggende klausul og krever tidligere kjennskap til andre SQL-funksjoner.