Клауза SQL OVER

Klauza Sql Over



Една от най-модерните функции на SQL е клаузата OVER. Това е функция, която ни позволява да извършваме изчисленията и да прилагаме функциите на прозореца на SQL върху конкретно подмножество от редове в рамките на даден набор от резултати.

Това е особено полезно, когато трябва да изчислите агрегирането или класирането за групи от редове, без всъщност да свивате целия набор от резултати.

Присъединете се към нас в този урок, докато научаваме всичко, което трябва да знаете, за да започнете да работите с клаузата OVER.







Изисквания:

Преди да се потопим във функционалността и работата на клаузата OVER, уверете се, че сте запознати с основите на SQL. Предполагаме също, че имате достъп до база данни, която можете да използвате, за да проверите знанията си.



В нашия случай ще използваме базата данни MySQL с примерната база данни Sakila. Просто се уверете, че имате достатъчно разрешения и че вашата база данни поддържа функциите на прозореца.



Синтаксис:

Както споменахме по-рано, в повечето случаи използваме главно клаузата OVER във връзка с функциите на прозореца.





Като такъв, можем да изразим синтаксиса на клаузата, както следва:

<прозоречна функция>(израз) OVER (

[ДЯЛ ПО partition_expression, ...]

[ПОРЕД ПО сорт_израз [ASC | DESC], ...]

[спецификация_на_рамка]

)

В дадения синтаксис можем да разделим всеки компонент по следния начин:



  1. – Отнася се за прозоречната функция, която искаме да приложим върху конкретен прозорец от редове като SUM(), AVG(), ROW_NUMBER(), RANK и т.н.
  2. Израз – Това указва колона или израз, за ​​които се прилага функцията прозорец.
  3. PARTITION BY – Това е незадължителна клауза, която разделя набора от резултати на дялове, където всеки дял е като отделна единица, където се прилага функцията. Редовете в рамките на един и същ дял споделят едни и същи стойности в посочените колони.
  4. ORDER BY – Това определя реда, в който се обработват редовете във всеки дял.
  5. frame_specification – Това е незадължителна клауза, която дефинира рамката на редовете в дяла. Общите спецификации на рамката включват РЕДОВЕ МЕЖДУ <начало> И <край> или ОБХВАТ МЕЖДУ <начало> И <край.

Като приключим с това, нека разгледаме някои практически примери как да го използваме.

Пример:

Нека демонстрираме как да използваме клаузата, използвайки примерната база данни Sakila. Помислете за пример, при който трябва да определим общия приход за всяка филмова категория.

Можем да използваме функцията за прозорец на сумата с клаузата OVER и куп изрази за присъединяване, както е показано в следния пример:

ИЗБЕРЕТЕ
име на категория КАТО име на категория,
film.title КАТО film_title,
film.rental_rate,
СУМА(плащане.сума) НАД (ДЯЛ ПО категория.име) КАТО общ_приход
ОТ
филм
ПРИСЪЕДИНЯВАНЕ
film_category ВКЛ
film.film_id = film_category.film_id
ПРИСЪЕДИНЯВАНЕ
категория ВКЛ
film_category.category_id = category.category_id
ПРИСЪЕДИНЯВАНЕ
инвентаризация ВКЛ
film.film_id = инвентар.film_id
ПРИСЪЕДИНЯВАНЕ
наем ON
inventory.inventory_id = rental.inventory_id
ПРИСЪЕДИНЯВАНЕ
плащане ВКЛ
rental.rental_id = payment.rental_id
ПОДРЕДЕНИ ПО
Име на категория,
film.title;

В дадената заявка започваме с избиране на заглавието на филма, наемната ставка и използваме израза за сумата (плащане.сума над дял по категория.име), за да определим сбора на всеки раздел на категория по името на категорията.

Трябва да използваме клаузата PARTITION BY, за да гарантираме, че изчисляването на сумата започва отново от всяка уникална категория.

Полученият резултат е както следва:

Ето го!

Заключение

В този пример изследвахме основите на работата с клаузата OVER в SQL. Това не е основна клауза и изисква предишно познаване на други функции на SQL.