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
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD i wzorce szeregów czasowych
- Sumy narastające i średnie kroczące