Clauza SQL OVER

Clauza Sql Over



Una dintre cele mai avansate caracteristici ale SQL este clauza OVER. Este o caracteristică care ne permite să efectuăm calculele și să aplicăm funcțiile ferestrei SQL peste un anumit subset de rânduri dintr-un anumit set de rezultate.

Este deosebit de util atunci când trebuie să calculați agregările sau clasamentele pentru grupuri de rânduri fără a restrânge efectiv întregul set de rezultate.

Alăturați-vă nouă în acest tutorial, deoarece învățăm tot ce trebuie să știți pentru a începe să lucrați cu clauza OVER.







Cerințe:

Înainte de a ne aprofunda în funcționalitatea și funcționarea clauzei OVER, asigurați-vă că aveți elementele de bază ale SQL la o parte. De asemenea, presupunem că aveți acces la o bază de date pe care o puteți utiliza pentru a vă testa cunoștințele.



În cazul nostru, vom folosi baza de date MySQL cu baza de date eșantion Sakila. Doar asigurați-vă că aveți suficiente permisiuni și că motorul bazei de date acceptă funcțiile ferestrei.



Sintaxă:

După cum am menționat mai devreme, în cele mai multe cazuri, folosim în principal clauza OVER împreună cu funcțiile ferestrei.





Ca atare, putem exprima sintaxa clauzei după cum urmează:

(expresie) OVER (

[PARTIȚIE DIN expresie_partiție, ...]

[ORDENAȚI DUPĂ expresie_de sortare [ASC | DESC], ...]

[specificație_cadru]

)

În sintaxa dată, putem descompune fiecare componentă după cum urmează:



  1. – Se referă la funcția fereastră pe care dorim să o aplicăm pe o anumită fereastră de rânduri, cum ar fi SUM(), AVG(), ROW_NUMBER(), RANK etc.
  2. Expresie – Aceasta specifică o coloană sau o expresie pentru care se aplică funcția fereastră.
  3. PARTITION BY – Aceasta este o clauză opțională care împarte setul de rezultate în partiții în care fiecare partiție este ca o unitate separată în care este aplicată funcția. Rândurile din aceeași partiție au aceleași valori în coloanele specificate.
  4. ORDER BY – Acesta specifică ordinea în care sunt procesate rândurile din fiecare partiție.
  5. frame_specification – Aceasta este o clauză opțională care definește cadrul de rânduri din cadrul partiției. Specificațiile obișnuite ale cadrului includ RÂNDURI ÎNTRE AND sau RANGE BETWEEN AND

Cu asta în afara drumului, haideți să explorăm câteva exemple practice despre cum să-l folosiți.

Exemplu:

Să demonstrăm cum să folosim clauza folosind baza de date exemplu Sakila. Luați în considerare un exemplu în care trebuie să determinăm venitul total pentru fiecare categorie de film.

Putem folosi funcția sum window cu clauza OVER și o grămadă de instrucțiuni join așa cum se arată în exemplul următor:

SELECTAȚI
categorie.nume AS categorie_nume,
film.title AS film_title,
film.rental_rate,
SUM(payment.amount) OVER (PARTIȚIE DUPĂ categorie.nume) AS total_revenue
DIN
film
A TE ALATURA
film_category ON
film.film_id = film_category.film_id
A TE ALATURA
categoria ON
film_category.category_id = categorie.category_id
A TE ALATURA
inventar ACTIVAT
film.film_id = inventar.film_id
A TE ALATURA
închiriere ON
inventory.inventory_id = inchiriere.inventory_id
A TE ALATURA
plata ON
rental.rental_id = payment.rental_id
COMANDA PENTRU
Numele categoriei,
film.titlu;

În interogarea dată, începem prin a selecta titlul filmului, rata de închiriere și folosim expresia sum (payment.amount over partition by category.name) pentru a determina suma fiecărei partiții de categorie după numele categoriei.

Trebuie să folosim clauza PARTITION BY pentru a ne asigura că calculul sumei repornește la fiecare categorie unică.

Rezultatul rezultat este după cum urmează:

Iată-l!

Concluzie

În acest exemplu, am explorat elementele fundamentale ale lucrului cu clauza OVER în SQL. Aceasta nu este o clauză de bază și necesită familiaritatea anterioară cu alte caracteristici SQL.