Klauzule SQL OVER

Klauzule Sql Over



Jednou z nejpokročilejších funkcí SQL je klauzule OVER. Je to funkce, která nám umožňuje provádět výpočty a aplikovat funkce okna SQL na konkrétní podmnožinu řádků v rámci dané sady výsledků.

Je zvláště užitečné, když potřebujete vypočítat agregace nebo hodnocení pro skupiny řádků, aniž byste ve skutečnosti sbalili celou sadu výsledků.

Připojte se k nám v tomto tutoriálu, kde se naučíme vše, co je potřeba vědět, abyste mohli začít pracovat s klauzulí OVER.







Požadavky:

Než se ponoříme do funkčnosti a fungování klauzule OVER, ujistěte se, že máte základy SQL z cesty. Předpokládáme také, že máte přístup k databázi, kterou můžete použít k otestování svých znalostí.



V našem případě použijeme databázi MySQL se vzorovou databází Sakila. Jen se ujistěte, že máte dostatečná oprávnění a že váš databázový stroj podporuje funkce okna.



Syntax:

Jak jsme uvedli dříve, ve většině případů používáme ve spojení s funkcemi okna hlavně klauzuli OVER.





Jako takovou můžeme syntaxi klauzule vyjádřit takto:

(výraz) NAD (

[PARTITION BY partition_expression, ...]

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

[frame_specifikace]

)

V dané syntaxi můžeme jednotlivé komponenty rozdělit takto:



  1. – odkazuje na funkci okna, kterou chceme použít v konkrétním okně řádků, jako je SUM(), AVG(), ROW_NUMBER(), RANK atd.
  2. Výraz – Určuje sloupec nebo výraz, pro který se použije funkce okna.
  3. PARTITION BY – Toto je volitelná klauzule, která rozděluje sadu výsledků do oddílů, kde každý oddíl je jako samostatná jednotka, kde je funkce aplikována. Řádky ve stejném oddílu sdílejí stejné hodnoty v určených sloupcích.
  4. ORDER BY – Určuje pořadí, ve kterém jsou zpracovány řádky v každém oddílu.
  5. specifikace_rámce – Toto je volitelná klauzule, která definuje rámec řádků v oddílu. Mezi běžné specifikace rámce patří ŘÁDKY BETWEEN AND nebo RANGE BETWEEN AND

S tím mimo, pojďme prozkoumat několik praktických příkladů, jak to používat.

Příklad:

Ukažme si, jak používat klauzuli pomocí ukázkové databáze Sakila. Zvažte příklad, kdy potřebujeme určit celkový příjem pro každou kategorii filmu.

Můžeme použít funkci součtového okna s klauzulí OVER a hromadou příkazů spojení, jak ukazuje následující příklad:

VYBRAT
category.name AS název_kategorie,
film.title AS název_filmu,
film.rental_rate,
SUM(platba.částka) NAD (PARTITION BY category.name) JAKO celkový_výnos
Z
film
PŘIPOJIT
Film_category ON
film.film_id = film_kategorie.film_id
PŘIPOJIT
kategorie ON
film_category.category_id = category.category_id
PŘIPOJIT
inventář ZAP
film.film_id = inventář.film_id
PŘIPOJIT
pronájem ON
inventar.inventory_id = pronájem.id_inventory
PŘIPOJIT
platba ON
rent.rental_id = payment.rental_id
SEŘADIT PODLE
Název Kategorie,
film.název;

V daném dotazu začneme výběrem názvu filmu, sazby půjčovného a pomocí výrazu suma (platba.částka přes oddíl podle názvu kategorie) určíme součet každého oddílu kategorie podle názvu kategorie.

Musíme použít klauzuli PARTITION BY, abychom zajistili, že výpočet součtu bude restartován u každé jedinečné kategorie.

Výsledný výstup je následující:

Tady to máš!

Závěr

V tomto příkladu jsme prozkoumali základy práce s klauzulí OVER v SQL. Toto není základní klauzule a vyžaduje předchozí znalost dalších funkcí SQL.