ROWS UNBOUNDED PRECEDING w MySQL

27 maja 2023

ROWS UNBOUNDED PRECEDING - funkcji okienkowych

Porozmawiajmy o ROWS UNBOUNDED PRECEDING i funkcji okienkowych.

Jednym z najpotężniejszych narzędzi w SQL jest zdolność do tworzenia zapytań analitycznych. Do tego celu służą funkcje okienkowe, które pozwalają na tworzenie bardziej skomplikowanych operacji na zestawach danych, takich jak obliczanie kumulatywnych sum czy średnich. Kluczowym aspektem zrozumienia funkcji okienkowych jest zrozumienie, jak określać „ramki okna”, na których te funkcje działają. W tym artykule skupimy się na jednym z tych mechanizmów, a mianowicie klauzuli ROWS UNBOUNDED PRECEDING.

Co oznacza ROWS UNBOUNDED PRECEDING?

W kontekście funkcji okienkowych, ROWS UNBOUNDED PRECEDING definiuje „ramkę okna”, czyli zestaw wierszy, na których operuje funkcja. ROWS UNBOUNDED PRECEDING określa, że ramka zaczyna się od pierwszego wiersza w oknie aż do bieżącego wiersza. Jest to bardzo użyteczne, gdy chcemy, na przykład, obliczyć kumulatywną sumę czy średnią.

Przykład użycia

Przyjrzyjmy się przykładowemu zastosowaniu ROWS UNBOUNDED PRECEDING. Załóżmy, że mamy tabelę order_items, która zawiera informacje o zamówionych produktach.

SELECT order_id, 
       product_id, 
       quantity,
       SUM(quantity) OVER (
           PARTITION BY order_id 
           ORDER BY product_id 
           ROWS UNBOUNDED PRECEDING
       ) as running_total
FROM order_items

W tym zapytaniu obliczamy bieżący całkowity (running_total) stan ilości produktów dla każdego zamówienia. Dla każdego wiersza, suma jest obliczana od pierwszego produktu w danym zamówieniu aż do bieżącego produktu. Efekt jest taki, że dla każdego zamówienia mamy kumulatywną sumę zamówionych produktów.

Warianty ROWS UNBOUNDED PRECEDING

Klauzula ROWS UNBOUNDED PRECEDING ma kilka odmian, które pozwalają na jeszcze większą precyzję w określaniu ramki okna:

  1. ROWS N PRECEDING: Ramka zaczyna się od N-tego wiersza przed bieżącym wierszem. Jest to przydatne, gdy chcemy skupić się na określonej liczbie poprzedzających wierszy.
  2. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: To jest podobne do ROWS UNBOUNDED PRECEDING, ale jest bardziej eksplicytne. Określa, że ramka zaczyna się od pierwszego wiersza i kończy na bieżącym wierszu.
  3. ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ta klauzula określa, że ramka obejmuje wszystkie wiersze w partycji. Może być przydatne, gdy chcemy uwzględnić wszystkie dane w naszych obliczeniach.
  4. ROWS BETWEEN N PRECEDING AND M FOLLOWING: Ta klauzula określa, że ramka zaczyna się od N-tego wiersza przed bieżącym wierszem i kończy M wierszy po bieżącym wierszu. Jest to przydatne, gdy chcemy uwzględnić zarówno poprzedzające, jak i następujące wiersze w naszych obliczeniach.

ROWS UNBOUNDED PRECEDING: Podsumowanie

Klauzula ROWS UNBOUNDED PRECEDING i jej warianty to potężne narzędzie w składni SQL, które pozwala na precyzyjne określenie ramki okna dla funkcji okienkowych. Pozwalają one na tworzenie skomplikowanych zapytań analitycznych, które mogą pomóc w odkrywaniu ukrytych wzorców i trendów w danych. Pamiętaj, że kluczem do efektywnego korzystania z tych narzędzi jest zrozumienie, jak działają i kiedy ich używać.

To tyle w tym temacie. Analizujcie w pokoju!  

Podobał Ci się ten artykuł 🙂?
Podziel się nim w Social Mediach 📱
>>> udostępnij go na LinkedIn i pokaż, że codziennie uczysz się czegoś nowego 
>>> wrzuć go na Facebooka, to się może przydać któremuś z Twoich znajomych 
>>> Przypnij sobie tą stronkę to zakładek, może się przydać w przyszłości

Wolisz oglądać 📺 niż czytać – nie ma problemu
>>> Obserwuj i oglądaj KajoData na YouTube

Inne ciekawe artykuły:

Ja Ci ją z przyjemnością wyślę. Za darmo. Bez spamu.

Poradnik Początkującego Analityka

Video - jak szukać pracy w IT

Regularne dawki darmowej wiedzy, bez spamu.

Zgadzam się na przetwarzanie moich danych osobowych przez KajoData Kajo Rudziński w celu realizacji usługi newsletter, a tym samym wysyłania mi informacji o produktach blogowych, usługach, lub nowościach, zgodnie z polityką prywatności. Wiem, że zgodę tę mogę w każdej chwili cofnąć.

Please wait...

Dziękujemy za zapis!