SQL OVER klauzula

Sql Over Klauzula



Viena no vismodernākajām SQL funkcijām ir OVER klauzula. Tā ir funkcija, kas ļauj mums veikt aprēķinus un lietot SQL loga funkcijas noteiktai rindu apakškopai noteiktā rezultātu kopā.

Tas ir īpaši noderīgi, ja jāaprēķina rindu grupu apkopojumi vai klasifikācijas, faktiski nesakļaujot visu rezultātu kopu.

Pievienojieties mums šajā apmācībā, jo mēs uzzinām visu, kas ir jāzina, lai jūs varētu sākt strādāt ar OVER klauzulu.







Prasības:

Pirms iedziļināties OVER klauzulas funkcionalitātē un darbībā, pārliecinieties, ka jums nav pieejami SQL pamati. Mēs arī pieņemam, ka jums ir piekļuve datu bāzei, kuru varat izmantot, lai pārbaudītu savas zināšanas.



Mūsu gadījumā mēs izmantosim MySQL datu bāzi ar Sakila paraugu datubāzi. Vienkārši pārliecinieties, vai jums ir pietiekamas atļaujas un vai jūsu datu bāzes programma atbalsta loga funkcijas.



Sintakse:

Kā jau minējām iepriekš, vairumā gadījumu mēs galvenokārt izmantojam OVER klauzulu kopā ar loga funkcijām.





Tādējādi mēs varam izteikt klauzulas sintaksi šādi:

(izteiksme) OVER (

[PARTITION BY partition_expression, ...]

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

[frame_specifikācija]

)

Dotajā sintaksē mēs varam sadalīt katru komponentu šādi:



  1.  — tā attiecas uz loga funkciju, kuru vēlamies lietot noteiktam rindu logam, piemēram, SUM(), AVG(), ROW_NUMBER(), RANK utt.
  2. Izteiksme — norāda kolonnu vai izteiksmi, kurai tiek lietota loga funkcija.
  3. PARTITION BY — šī ir izvēles klauzula, kas sadala rezultātu kopu nodalījumos, kur katrs nodalījums ir kā atsevišķa vienība, kurā tiek lietota funkcija. Viena nodalījuma rindām norādītajās kolonnās ir vienādas vērtības.
  4. ORDER BY — norāda secību, kādā tiek apstrādātas rindas katrā nodalījumā.
  5. frame_specification — šī ir izvēles klauzula, kas definē rindu rāmi nodalījumā. Parastās rāmja specifikācijas ietver ROWS BETWEEN UN vai RANGE BETWEEN UN

Tā kā tas nav noticis, izpētīsim dažus praktiskus piemērus, kā to izmantot.

Piemērs:

Parādīsim, kā izmantot klauzulu, izmantojot Sakila paraugu datubāzi. Apsveriet piemēru, kur mums ir jānosaka kopējie ieņēmumi katrai filmu kategorijai.

Mēs varam izmantot summas loga funkciju ar OVER klauzulu un virkni savienojuma paziņojumu, kā parādīts šajā piemērā:

ATLASĪT
kategorija.nosaukums AS kategorijas_nosaukums,
film.title AS film_title,
film.rental_rate,
SUM(maksājuma.summa) PĀRSNIEDZ (DAĻA PĒC kategorijas.nosaukums) AS kopējie_ieņēmumi
NO
filma
PIEVIENOJIES
filma_kategorija IESLĒGTA
filma.filmas_id = filmas_kategorija.filmas_id
PIEVIENOJIES
kategorija IESLĒGTA
filmas_kategorija.kategorijas_id = category.category_id
PIEVIENOJIES
inventārs IESLĒGTS
filma.filmas_id = inventārs.filmas_id
PIEVIENOJIES
noma ON
inventory.inventory_id = rental.inventory_id
PIEVIENOJIES
maksājums IESLĒGTS
rental.rental_id = payment.rental_id
SAKĀRTOT PĒC
kategorija.nosaukums,
filma.title;

Dotajā vaicājumā mēs sākam ar filmas nosaukuma atlasi, nomas likmi un izmantojam izteiksmi summa (maksājums.summa virs nodalījuma pēc kategorijas.nosaukums), lai noteiktu katras kategorijas nodalījuma summu pēc kategorijas nosaukuma.

Mums ir jāizmanto klauzula PARTITION BY, lai nodrošinātu, ka summas aprēķins tiek atsākts katrā unikālajā kategorijā.

Rezultātā iegūtais rezultāts ir šāds:

Tur jums tas ir!

Secinājums

Šajā piemērā mēs izpētījām pamatus darbam ar OVER klauzulu SQL. Šī nav pamata klauzula, un tai ir nepieciešama iepriekšēja pārzināšana ar citiem SQL līdzekļiem.