SlideShare a Scribd company logo
Wstęp do funkcji okienkowych
w MS SQL Server
Rafał Suchorski
1
poczta@suchorscy.pl
Plan
• Przykład
• Co to jest „okno” i jakie ma funkcje?
• Jakie właściwości może mieć okno?
• Gdzie można użyć funkcji okna
• Gdzie można użyć funkcji okna… chociaż teoretycznie nie można
• Funkcje agregujące
• Funkcje rankingowe
• Funkcje przesunięcia
• Funkcje rozkładu statystycznego (bez detali)
• Na co zwrócić uwagę?
• Na co czekamy?
2
Przykład
• Zrobić raport z widoku Sales.OrderValues
• Pokazać:
• Numer zamówienia,
• Datę zamówienia,
• ID klienta,
• Wartość zamówienia
• Wartość wszystkich zamówień klienta
• Wartość wszystkich zamówień
• Ranking zamówienia wg wartości
• Posortować wynik po ID klienta i dacie zamówienia rosnąco.
• Uwzględnić tylko zamówienia z roku 2008
3
Co to jest „okno” i jakie ma funkcje?
• Koncepcja opisana w standardzie języka SQL (wspieranego przez ISO, ANSI)
• Okno to zakres wierszy względem wiersza bieżącego
• Funkcja okienkowa to funkcja stosowana dla wszystkich wierszy okna
• Opierają się na koncepcji wyznaczania zakresu okna, czyli stosowaniu
różnych obliczeń na zbiorze wierszy (oknie) i otrzymywaniu pojedynczej
wartości dla każdego wiersza.
• Standard języka SQL opisuje więcej funkcji, niż jest dostępnych w MS SQL
Server
• Funkcje okna można rozpoznać po klauzuli OVER() – ale są wyjątki (NEXT
VALUE FOR)
4
Jakie właściwości może mieć okno?
Klauzula OVER() może mieć 3 części definicji (zależnie od funkcji) :
• PARTYCJA
• PARTITION BY ….
• Lista kolumn lub wyrażeń, w których zmiana wartości powoduje „liczenie od nowa”
• Domyślnie – cały zbiór to jedna partycja
• PORZĄDEK
• ORDER BY….
• Kolejność wierszy w ramach partycji
• RAMY – ROZMIAR OKNA
• ROWS – przesunięcie o liczbę wierszy od bieżącego wiersza, dodaje wewnętrzną
sekwencję powodującą, że każdy wiersz jest inny
• RANGE – przesunięcie o logiczną różnicę między wartością początkową bieżącego
wiersza a wartością granicy
5
Jakie właściwości może mieć okno? cd.
• RAMY – ROZMIAR OKNA
• ROWS – pełne wsparcie w SQLServer 2012, częściowe w SQLServer 2005
• RANGE – częściowe wsparcie w SQLServer 2012
• EXCLUDE – standard SQL opisuje, SQLServer 2012 nie wspiera
• Domyślny rozmiar okna:
RANGE BETWEEN UNBOUNDED PROCEDING AND CURRENT ROW
6
Jakie właściwości może mieć okno? cd.
• ROWS
• RANGE
OD DO
UNBOUNDED UNBOUNDED
<n> PRECEDING AND <n> FOLLOWING
<n> FOLLOWING <n> PRECEDING
CURRENT ROW CURRENT ROW
OD DO
UNBOUNDED UNBOUNDED
<n> PRECEDING AND <n> FOLLOWING
<n> FOLLOWING <n> PROCEDING
CURRENT ROW CURRENT ROW
INTERVAL <n> PRECEDING 7
Gdzie można użyć funkcji okienkowych?
• Logika przetwarzania zapytań
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
1. Przetwarzanie wyrażeń
2. Usunięcie powtórzeń
6. ORDER
8
Gdzie można użyć funkcji okienkowych
(chociaż teoretycznie nie można)
• DELETE
• UPDATE
9
Funkcje agregujące
• Od wersji 2005, ale tylko z 1 częścią definicji: partycją
• Nazwy takie same jak funkcji agregacji w klauzulach grupujących:
SUM(), MIN(), MAX(), AVG(), COUNT()…
• Od wersji 2012 wspierane są 3 części definicji: partycja, porządek i
rama.
• Nie wspierana jest opcja DISTINCT
10
Funkcje rankingowe
• Dostępne od SQLServer 2005, z 2 częściami definicji: partycją i
porządkiem
• ROW_NUMBER()
• NTILE()
• RANK()
• DENSE_RANK()
• OBOWIĄZKOWA KLAUZULA „ORDER BY”
11
Funkcje rankingowe – ROW_NUMBER()
• Generuje unikatowe numery wierszy w partycji – nawet gdy wiersze
te mają te same wartości porządkowe ( wartości atrybutów w
porządku okna)
• Może więc dawać wartości przypadkowe (!) jeśli nie określimy
dokładnie porządku okna. Klauzula ORDER BY jest obowiązkowa, ale
można oszukać SQLServer  i uzyskać w pełni przypadkowe numery.
• Wartość wyznaczona przez funkcję nie ma związku z kolejnością
prezentowaną w wyniku
12
Funkcje rankingowe – NTILE()
• Pozwala na podział wierszy w partycji na części - mniej więcej
równoliczne.
• Jest odwrotna do stronicowania - liczba podzbiorów jest stała, a
rozmiar podzbioru dynamiczny
• Podobnie jak ROW_NUMER() jest niedeterministyczna – może
zwracać wyniki przypadkowe
13
Funkcje rankingowe – RANK(), DENSE_RANK()
• RANK() – ranking
• DENSE_RANK() – ranking z ciągłością numeracji
• Są przydatne, gdy zbiór ma wartości powtarzające się – jeśli ich nie
ma, dają taki wynik jak ROW_NUMBER()
14
Funkcje przesunięcia
• Od wersji 2012
• Wspierają klauzule PARTITION_BY i ORDER_BY
• Przesunięcie względem bieżącego wiersza:
• LAG()
• LEAD()
• Przesunięcie wyliczane w oparciu o brzegi okna:
• FIRST_VALUE()
• LAST_VALUE()
• NTH_VALUE()
• WSPIERAJĄ TAKŻE KLAUZULĘ RAMY ROWS / RANGE
15
Funkcje przesunięcia – LAG(), LEAD()
• Zwracają wartość z wiersza partycji przesuniętego o n wierszy
• LAG() – wiersze wcześniejsze
• LEAD() – wiersze późniejsze
• Domyślne przesunięcie to 1 wiersz (drugi parametr)
• Domyślnie brak wartości prezentowany jako NULL (trzeci parametr)
• Wywołanie: LAG(wartość_zwracana, przesunięcie,
wartość_gdy_NULL)
16
Funkcje przesunięcia – FIRST_VALUE(),
LAST_VALUE()
• Wspierają określenie ramy okna
• LAST_VALUE() daje niepożądane efekty (!) przy nieświadomym użyciu
17
Funkcje rozkładu statystycznego
• Dostępne od wersji 2012
• Rozkład rankingu:
• PERCENT_RANK() OVER(P, O) = (rank-1)/(count-1)
• CUME_DIST() OVER(P, O) = 1-((count-rank)/count)
• Rozkład odwrotny:
• Przydatne przy wyliczaniu np. mediany
• Specyficzna składnia, po ORDER BY może być tylko jedna kolumna
• PERCENTILE_DISC(0..1) WITHIN GROUP (ORDER BY) OVER(P)
• Zwraca wartość z kolumny ORDER BY z pierwszego wiersza, gdzie Cume_Dist >=
parametr
18
Funkcje rozkładu statystycznego cd.
• PERCENTILE_CONT(0..1) WITHIN GROUP (ORDER BY) OVER(P)
RN = (1 + (P * ( N - 1 ))
P = Percentile Specified N = Number of rows
CRN = CEILING(RN) FRN = FLOOR(RN).
If (CRN = FRN = RN) then the result is [value of expression from row at RN]
Otherwise the result is
(CRN - RN) * (value of expression for row at FRN) +
(RN - FRN) * (value of expression for row at CRN)
19
Na co zwrócić uwagę?
• Operatory w planach zapytań:
• Segment – definicja warunków dla resetowania funkcji (koniec okna lub
koniec partycji)
• Sort – sortowanie, bardzo kosztowne, złożoność = n*log(n))
• Sequence project – generuje kolejne liczby
20
Na co zwrócić uwagę? cd.
• WINDOW SPOOL – tabela podręczna, zapamiętuje wartości agregacji pośrednich.
Tworzona w pamięci (WORKTABLE logical read=0) lub w tempdb.
• TABLE SPOOL – tabela robocza, zawsze w tempdb
• Indeks POC (filtering, Partitioning, Ordering, Covering) jeśli chcemy
uniknąć operacji SORT
• Skanowanie „wstecz” zawsze szeregowe, „w przód” – równoległe.
21
Na co czekam(y)?
• Pełna obsługa RANGE (INTERVAL)
• Definiowanie parametru wielkości okna przy zapisie do TEMPDB
• WIELOKROTNE WYKORZYSTANIE FUNKCJI OKNA
22
Podsumowania…
• 2005:
• funkcje rankingowe
• funkcje agregujące
• 2012:
• funkcje analityczne
• funkcje przesunięcia
• rozszerzenie funkcji agregujących o klauzulę ORDER BY
• wprowadzenie ram – domyślnie RANGE (!)
23
Co dalej?
• http://sqlmag.com/sql-server-2012/how-use-microsoft-sql-
server-2012s-window-functions-part-1
• http://pragmaticworks.com/Training/FreeTraining/ViewWebinar/
WebinarID/600
• http://pragmaticworks.com/Training/FreeTraining/ViewWebinar/
WebinarID/607
• http://www.ksiazki.promise.pl/aspx/produkt.aspx?pid=69391&n=
microsoft_sql_server_2012_optymalizacja_kwerend_t-
sql_przy_uzyciu_funkcji_okna
• http://www.mssqltips.com/sqlservertip/2645/sql-server-2012-
analytical-functions--percentilecont-and-percentiledisc/
24

More Related Content

Featured

Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
GetSmarter
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
Project for Public Spaces & National Center for Biking and Walking
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
DevGAMM Conference
 

Featured (20)

Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 

wstęp do funkcji okienkowych

  • 1. Wstęp do funkcji okienkowych w MS SQL Server Rafał Suchorski 1 poczta@suchorscy.pl
  • 2. Plan • Przykład • Co to jest „okno” i jakie ma funkcje? • Jakie właściwości może mieć okno? • Gdzie można użyć funkcji okna • Gdzie można użyć funkcji okna… chociaż teoretycznie nie można • Funkcje agregujące • Funkcje rankingowe • Funkcje przesunięcia • Funkcje rozkładu statystycznego (bez detali) • Na co zwrócić uwagę? • Na co czekamy? 2
  • 3. Przykład • Zrobić raport z widoku Sales.OrderValues • Pokazać: • Numer zamówienia, • Datę zamówienia, • ID klienta, • Wartość zamówienia • Wartość wszystkich zamówień klienta • Wartość wszystkich zamówień • Ranking zamówienia wg wartości • Posortować wynik po ID klienta i dacie zamówienia rosnąco. • Uwzględnić tylko zamówienia z roku 2008 3
  • 4. Co to jest „okno” i jakie ma funkcje? • Koncepcja opisana w standardzie języka SQL (wspieranego przez ISO, ANSI) • Okno to zakres wierszy względem wiersza bieżącego • Funkcja okienkowa to funkcja stosowana dla wszystkich wierszy okna • Opierają się na koncepcji wyznaczania zakresu okna, czyli stosowaniu różnych obliczeń na zbiorze wierszy (oknie) i otrzymywaniu pojedynczej wartości dla każdego wiersza. • Standard języka SQL opisuje więcej funkcji, niż jest dostępnych w MS SQL Server • Funkcje okna można rozpoznać po klauzuli OVER() – ale są wyjątki (NEXT VALUE FOR) 4
  • 5. Jakie właściwości może mieć okno? Klauzula OVER() może mieć 3 części definicji (zależnie od funkcji) : • PARTYCJA • PARTITION BY …. • Lista kolumn lub wyrażeń, w których zmiana wartości powoduje „liczenie od nowa” • Domyślnie – cały zbiór to jedna partycja • PORZĄDEK • ORDER BY…. • Kolejność wierszy w ramach partycji • RAMY – ROZMIAR OKNA • ROWS – przesunięcie o liczbę wierszy od bieżącego wiersza, dodaje wewnętrzną sekwencję powodującą, że każdy wiersz jest inny • RANGE – przesunięcie o logiczną różnicę między wartością początkową bieżącego wiersza a wartością granicy 5
  • 6. Jakie właściwości może mieć okno? cd. • RAMY – ROZMIAR OKNA • ROWS – pełne wsparcie w SQLServer 2012, częściowe w SQLServer 2005 • RANGE – częściowe wsparcie w SQLServer 2012 • EXCLUDE – standard SQL opisuje, SQLServer 2012 nie wspiera • Domyślny rozmiar okna: RANGE BETWEEN UNBOUNDED PROCEDING AND CURRENT ROW 6
  • 7. Jakie właściwości może mieć okno? cd. • ROWS • RANGE OD DO UNBOUNDED UNBOUNDED <n> PRECEDING AND <n> FOLLOWING <n> FOLLOWING <n> PRECEDING CURRENT ROW CURRENT ROW OD DO UNBOUNDED UNBOUNDED <n> PRECEDING AND <n> FOLLOWING <n> FOLLOWING <n> PROCEDING CURRENT ROW CURRENT ROW INTERVAL <n> PRECEDING 7
  • 8. Gdzie można użyć funkcji okienkowych? • Logika przetwarzania zapytań 1. FROM 2. WHERE 3. GROUP BY 4. HAVING 5. SELECT 1. Przetwarzanie wyrażeń 2. Usunięcie powtórzeń 6. ORDER 8
  • 9. Gdzie można użyć funkcji okienkowych (chociaż teoretycznie nie można) • DELETE • UPDATE 9
  • 10. Funkcje agregujące • Od wersji 2005, ale tylko z 1 częścią definicji: partycją • Nazwy takie same jak funkcji agregacji w klauzulach grupujących: SUM(), MIN(), MAX(), AVG(), COUNT()… • Od wersji 2012 wspierane są 3 części definicji: partycja, porządek i rama. • Nie wspierana jest opcja DISTINCT 10
  • 11. Funkcje rankingowe • Dostępne od SQLServer 2005, z 2 częściami definicji: partycją i porządkiem • ROW_NUMBER() • NTILE() • RANK() • DENSE_RANK() • OBOWIĄZKOWA KLAUZULA „ORDER BY” 11
  • 12. Funkcje rankingowe – ROW_NUMBER() • Generuje unikatowe numery wierszy w partycji – nawet gdy wiersze te mają te same wartości porządkowe ( wartości atrybutów w porządku okna) • Może więc dawać wartości przypadkowe (!) jeśli nie określimy dokładnie porządku okna. Klauzula ORDER BY jest obowiązkowa, ale można oszukać SQLServer  i uzyskać w pełni przypadkowe numery. • Wartość wyznaczona przez funkcję nie ma związku z kolejnością prezentowaną w wyniku 12
  • 13. Funkcje rankingowe – NTILE() • Pozwala na podział wierszy w partycji na części - mniej więcej równoliczne. • Jest odwrotna do stronicowania - liczba podzbiorów jest stała, a rozmiar podzbioru dynamiczny • Podobnie jak ROW_NUMER() jest niedeterministyczna – może zwracać wyniki przypadkowe 13
  • 14. Funkcje rankingowe – RANK(), DENSE_RANK() • RANK() – ranking • DENSE_RANK() – ranking z ciągłością numeracji • Są przydatne, gdy zbiór ma wartości powtarzające się – jeśli ich nie ma, dają taki wynik jak ROW_NUMBER() 14
  • 15. Funkcje przesunięcia • Od wersji 2012 • Wspierają klauzule PARTITION_BY i ORDER_BY • Przesunięcie względem bieżącego wiersza: • LAG() • LEAD() • Przesunięcie wyliczane w oparciu o brzegi okna: • FIRST_VALUE() • LAST_VALUE() • NTH_VALUE() • WSPIERAJĄ TAKŻE KLAUZULĘ RAMY ROWS / RANGE 15
  • 16. Funkcje przesunięcia – LAG(), LEAD() • Zwracają wartość z wiersza partycji przesuniętego o n wierszy • LAG() – wiersze wcześniejsze • LEAD() – wiersze późniejsze • Domyślne przesunięcie to 1 wiersz (drugi parametr) • Domyślnie brak wartości prezentowany jako NULL (trzeci parametr) • Wywołanie: LAG(wartość_zwracana, przesunięcie, wartość_gdy_NULL) 16
  • 17. Funkcje przesunięcia – FIRST_VALUE(), LAST_VALUE() • Wspierają określenie ramy okna • LAST_VALUE() daje niepożądane efekty (!) przy nieświadomym użyciu 17
  • 18. Funkcje rozkładu statystycznego • Dostępne od wersji 2012 • Rozkład rankingu: • PERCENT_RANK() OVER(P, O) = (rank-1)/(count-1) • CUME_DIST() OVER(P, O) = 1-((count-rank)/count) • Rozkład odwrotny: • Przydatne przy wyliczaniu np. mediany • Specyficzna składnia, po ORDER BY może być tylko jedna kolumna • PERCENTILE_DISC(0..1) WITHIN GROUP (ORDER BY) OVER(P) • Zwraca wartość z kolumny ORDER BY z pierwszego wiersza, gdzie Cume_Dist >= parametr 18
  • 19. Funkcje rozkładu statystycznego cd. • PERCENTILE_CONT(0..1) WITHIN GROUP (ORDER BY) OVER(P) RN = (1 + (P * ( N - 1 )) P = Percentile Specified N = Number of rows CRN = CEILING(RN) FRN = FLOOR(RN). If (CRN = FRN = RN) then the result is [value of expression from row at RN] Otherwise the result is (CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN) 19
  • 20. Na co zwrócić uwagę? • Operatory w planach zapytań: • Segment – definicja warunków dla resetowania funkcji (koniec okna lub koniec partycji) • Sort – sortowanie, bardzo kosztowne, złożoność = n*log(n)) • Sequence project – generuje kolejne liczby 20
  • 21. Na co zwrócić uwagę? cd. • WINDOW SPOOL – tabela podręczna, zapamiętuje wartości agregacji pośrednich. Tworzona w pamięci (WORKTABLE logical read=0) lub w tempdb. • TABLE SPOOL – tabela robocza, zawsze w tempdb • Indeks POC (filtering, Partitioning, Ordering, Covering) jeśli chcemy uniknąć operacji SORT • Skanowanie „wstecz” zawsze szeregowe, „w przód” – równoległe. 21
  • 22. Na co czekam(y)? • Pełna obsługa RANGE (INTERVAL) • Definiowanie parametru wielkości okna przy zapisie do TEMPDB • WIELOKROTNE WYKORZYSTANIE FUNKCJI OKNA 22
  • 23. Podsumowania… • 2005: • funkcje rankingowe • funkcje agregujące • 2012: • funkcje analityczne • funkcje przesunięcia • rozszerzenie funkcji agregujących o klauzulę ORDER BY • wprowadzenie ram – domyślnie RANGE (!) 23
  • 24. Co dalej? • http://sqlmag.com/sql-server-2012/how-use-microsoft-sql- server-2012s-window-functions-part-1 • http://pragmaticworks.com/Training/FreeTraining/ViewWebinar/ WebinarID/600 • http://pragmaticworks.com/Training/FreeTraining/ViewWebinar/ WebinarID/607 • http://www.ksiazki.promise.pl/aspx/produkt.aspx?pid=69391&n= microsoft_sql_server_2012_optymalizacja_kwerend_t- sql_przy_uzyciu_funkcji_okna • http://www.mssqltips.com/sqlservertip/2645/sql-server-2012- analytical-functions--percentilecont-and-percentiledisc/ 24

Editor's Notes

  1. ROWS / RANGE: Pobierz sumę 3 ostatnich okresów sprzedaży
  2. Kod 52 ROWS/RANGE nie ma znaczenia, jeśli zbiór wyznaczony przez partycję i porządek jest unikatowy
  3. INTERVAL ’ 2’ MONTH PRECEDING AND CURRENT ROW
  4. Po co opcja ORDER BY w sumowaniu ? Nie wspierane jest DISTINCT w funkcji, a nie w SELECT wyników
  5. ROW_NUMBER z ORDER _BY (SELECT NULL) jest szybsza, bo IndexScan nie musi sortować – jego atrybut Ordered=False
  6. Bazuje na row_number()
  7. RANK – 1,1,1,4 DENSE_RANK 1,1,1,2
  8. Next value – wg standardu – wartość wiersza przesuniętego o n wierszy
  9. Obejście – subqueries lub joiny , z takim samym row_numer – 1, +1
  10. Alternatywa – znowu row_numer() , grupowanie, łączenie , CASE Dlaczego LAST_VALUE() źle działa? Bo domyślna rama to do CURRENT_ROW()
  11. Złożoność 1000 > 3000 10 000 > 40 000 100 000 > 500 000 000 100 000 000 > 800 000 000
  12. 118, 119 Window spool - Służy do pobrania dla każdego wiersza źródłowego wszystkich wierszy ramy. Do tempdb dane trafiają, gdy ilość wierszy w ramce jest większa niż 10 000 dla ROWS lub zawsze dla RANGE. Dlatego ROWS jest szybsze ! Można to sprawdzić przy XEvents lub statystykami IO. Równoległe skanowanie wstecz nie jest jeszcze zaimplementowane, należy rozważyć indeks w tej kolejności