0Pricing
SQL Academy · Lekcja

Klauzule ramki: ROWS a RANGE

Wybierać między klauzulami ramki ROWS BETWEEN i RANGE BETWEEN oraz rozumieć, jak każda z nich obsługuje duplikaty i luki

Klauzule ramki: ROWS a RANGE 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.

Ramka wewnątrz OVER

Funkcja okna działa na ramce — podzbiorze wierszy z partycji. Ramkę definiują:

OVER (
  PARTITION BY ...
  ORDER BY ...
  ROWS BETWEEN <start> AND <end>     -- or RANGE BETWEEN ...
)

Ramka domyślna

Jeśli określą Państwo ORDER BY, ale nie podadzą ramki, domyślnie zostanie użyta:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- "From the first row up to all rows tied with the current row".

ROWS liczy fizyczne wiersze

ROWS zlicza N wierszy w kolejności partycji, niezależnie od wartości:

SUM(x) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- The current row plus the previous 2.  Exactly 3 rows.

RANGE liczy według wartości

RANGE zlicza wiersze, których wartość ORDER BY mieści się w przedziale względem bieżącej wartości:

SUM(x) OVER (
  ORDER BY day
  RANGE BETWEEN INTERVAL '2 days' PRECEDING AND CURRENT ROW
)
-- All rows within 2 days (by calendar) of the current row.

Dlaczego to rozróżnienie ma znaczenie

Jeśli w danych występują luki, ROWS i RANGE zwracają różne wyniki:

-- Days: 1, 3, 5 (no 2 or 4)
-- ROWS BETWEEN 2 PRECEDING AND CURRENT ROW for day 5: rows 1,3,5 = 3 days
-- RANGE BETWEEN INTERVAL '2 days' PRECEDING for day 5: only days 3,5 = 2 days

Ramka GROUPS (PG 11+)

GROUPS zlicza grupy równorzędnych wierszy (remisy według ORDER BY), a nie pojedyncze wiersze:

SUM(x) OVER (
  ORDER BY tier
  GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
)
-- "The current tier and the previous tier" — useful when ORDER BY has many ties.

Granice ramki

  • UNBOUNDED PRECEDING — pierwszy wiersz partycji
  • n PRECEDING
  • CURRENT ROW
  • n FOLLOWING
  • UNBOUNDED FOLLOWING — ostatni wiersz

Suma narastająca

Suma od początku do bieżącego wiersza:

SUM(x) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- Same as the default frame.

Okno kroczące wstecz

Średnia krocząca z ostatnich N dni:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7d

Okno wyśrodkowane

Uwzględnij wiersze przed bieżącym i po nim:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7d

Niespodzianka związana z LAST_VALUE

LAST_VALUE z domyślną ramką zwraca bieżący wiersz, a nie ostatni wiersz partycji. Należy użyć jawnie określonej ramki bez ograniczeń:

LAST_VALUE(name) OVER (
  PARTITION BY group ORDER BY day
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)

Klauzula EXCLUDE (PG 11+)

Pomiń określone wiersze w ramce:

SUM(x) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  EXCLUDE CURRENT ROW
)
-- All previous 6 days but not today.

Podsumowanie

Klauzule ramek zapewniają precyzyjną kontrolę nad oknami.

  • ROWS — liczba fizycznych wierszy
  • RANGE — przedział oparty na wartości
  • GROUPS — grupy równorzędnych wierszy
  • Domyślna ramka może zaskakiwać — należy określać ją jawnie

Szybki test

Mają Państwo dzienne przychody z brakującymi dniami. Która ramka zwróci „wszystkie wiersze z 7 dni kalendarzowych poprzedzających bieżący dzień”?

Często zadawane pytania

Czy lekcja „Klauzule ramki: ROWS a RANGE” jest bezpłatna?

Tak — pełny tekst „Klauzule ramki: ROWS a RANGE” 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 „Klauzule ramki: ROWS a RANGE”?

Wybierać między klauzulami ramki ROWS BETWEEN i RANGE BETWEEN oraz rozumieć, jak każda z nich obsługuje duplikaty i luki Ć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 „Klauzule ramki: ROWS a RANGE”?

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. Klauzule ramki: ROWS a RANGE
  2. LAG/LEAD z oknami ramki
  3. Grupowanie za pomocą NTILE i Cume_Dist
  4. Wzorce raportowania z rzeczywistego świata
← Powrót do SQL Academy