SQL OVER-klausul

Sql Over Klausul



En av de mest avanserte funksjonene i SQL er OVER-klausulen. Det er en funksjon som lar oss utføre beregningene og bruke SQL-vindusfunksjonene over et spesifikt undersett av rader innenfor et gitt resultatsett.

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:

(uttrykk) OVER (

[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:



  1. – Det refererer til vindusfunksjonen som vi ønsker å bruke over et spesifikt vindu med rader som SUM(), AVG(), ROW_NUMBER(), RANK, etc.
  2. Uttrykk – Dette spesifiserer en kolonne eller et uttrykk som vindusfunksjonen brukes for.
  3. 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.
  4. ORDER BY – Dette spesifiserer rekkefølgen som radene i hver partisjon behandles i.
  5. 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 UT
kategori.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.