T-SQL

Window funkce v T-SQL

Základní window funkce v SQL Serveru známe všichni: ROW_NUMBER()RANK(), DENSE_RANK() a NTILE(). K nim se v dalších verzích SQL Serveru přidaly ještě funkce LEAD() a LAG(), na ty se ale podíváme někdy příště. Dnešní článek se nebude věnovat detailům jednotlivých funkcí, ale měl se stát spíše rozcestníkem, do něhož se půjdete podívat, pokud nebudete vědět, která ze čtyř základních funkcí se pro Váš úkol hodí nejlépe.

Pojďme si tedy ukázat, jak se jednotlivé funkce chovají.

Nejprve si vytvoříme tabulku a naplníme ji jednoduchým vzorkem testovacích dat:

Nad tabulkou spustíme dotaz s jednoduchou aplikací window funkcí (zatím bez PARTITION BY):

AnalyticFunctionsTSQL1

Vidíme, že datovou sadu, kde jsou všechny řádky unikátní, nám všechny funkce vrací stejné hodnoty, pouze NTILE() dělá svoji práci nezávisle na povaze zdrojových dat a zkrátka rozdělí data na požadované úseky, v tomto případě 2 část (NTILE(2)).

Nyní zkusme do testovací tabulky přidat nějaké duplicitní řádky:

Opět spustíme window funkce, u kterých si rovnou otestujeme i PARTITION BY klauzuli:

AnalyticFunctionsTSQL2

Na obrázku krásně vidíme chování jednotlivých funkcí v případě duplicitních hodnot a zároveň i to, jak se chování funkcí změní, použijeme-li klauzuli PARTITION BY.

Leave a Reply

Your email address will not be published. Required fields are marked *