0Pricing
SQL Academy · Lekcja

OVER, PARTITION BY, ORDER BY

Poznaj model funkcji okienkowych: OVER, PARTITION BY (grupowanie), ORDER BY (sortowanie) oraz różnice względem GROUP BY.

OVER, PARTITION BY, ORDER BY to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Czym jest funkcja okna?

Funkcja okna oblicza wartość na podstawie zbioru wierszy powiązanych z bieżącym wierszem — bez redukowania wyniku, jak robi to GROUP BY. Zachowują Państwo każdy wiersz, a jednocześnie otrzymują kolumnę z wartością agregującą.

Podstawowy przykład

Średnia wartość zamówienia dla całej tabeli, wyświetlana w każdym wierszu:

SELECT id, total,
       AVG(total) OVER () AS avg_total
FROM orders;

Klauzula OVER

Klauzula OVER (...) definiuje okno. Puste nawiasy oznaczają „cały zbiór wyników”.

SELECT id, total,
       SUM(total) OVER () AS grand_total
FROM orders;

PARTITION BY: grupowanie okna

Podobnie jak GROUP BY, ale wiersze nie są redukowane:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;

-- Every order keeps its row; user_total is the same for all of one user's orders.

ORDER BY w oknie

ORDER BY wewnątrz OVER definiuje kolejność wierszy dla obliczeń narastających:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;

-- Running total per user, ordered by date.

Okno a GROUP BY

Porównanie obok siebie:

-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;

-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id)
FROM orders;

Inna ramka dla każdego wiersza

„Ramka” to zbiór wierszy w obrębie partycji, które analizuje funkcja. Domyślna ramka z ORDER BY obejmuje „wiersze od początku do bieżącego wiersza” — właśnie dlatego można obliczać sumy narastające.

Nazwane okna

Jeśli wiele funkcji korzysta z tego samego okna, należy nazwać je tylko raz:

SELECT id, user_id, total,
       SUM(total) OVER w AS running_sum,
       AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);

Większość agregatów działa jako funkcje okna

COUNT, SUM, AVG, MIN, MAX — wszystkie można stosować w oknie. Wyspecjalizowane funkcje okna obejmują ROW_NUMBER, RANK, LAG/LEAD, NTILE itd.

Funkcje okna są wykonywane po WHERE

Logiczna kolejność: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT. Dlatego WHERE filtruje wiersze, zanim zostaną obliczone funkcje okna.

Kwestie wydajności

Funkcje okna wymagają sortowania (lub użycia haszowania). W przypadku dużych partycji indeks na kolumnach (partycja, kolejność) eliminuje etap sortowania.

Podsumowanie

Funkcje okna dodają wartości agregujące do poszczególnych wierszy.

  • OVER () = cały wynik
  • PARTITION BY = grupowanie okna
  • ORDER BY w oknie = włączenie obliczeń narastających

Szybkie sprawdzenie

Co oblicza SUM(x) OVER (PARTITION BY user_id)?

Często zadawane pytania

Czy lekcja „OVER, PARTITION BY, ORDER BY” jest bezpłatna?

Tak — pełny tekst „OVER, PARTITION BY, ORDER BY” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „OVER, PARTITION BY, ORDER BY”?

Poznaj model funkcji okienkowych: OVER, PARTITION BY (grupowanie), ORDER BY (sortowanie) oraz różnice względem GROUP BY. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „OVER, PARTITION BY, ORDER BY”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD i wzorce szeregów czasowych
  4. Sumy narastające i średnie kroczące
← Powrót do SQL Academy