Kryterium ROWS i RANGE
Część sekcji Podstawy ścieżki SQL w Coddy. Lekcja 69 z 72.
Na razie nie możemy elastycznie wybierać, ile wierszy przed lub po danym wierszu uwzględnić. Teraz jest to możliwe dzięki kryteriom ROWS i RANGE. Aby ich użyć, piszemy:
OVER (ROWS BETWEEN --START-- AND --END--)
OVER (RANGE BETWEEN --START-- AND --END--)
Możemy określić następujące opcje:
CURRENT ROW– bieżący wierszn PRECEDING– wiersze przed bieżącym wierszemn FOLLOWING– wiersze po bieżącym wierszu
Różnica między ROWS a RANGE polega na tym, że kryterium ROWS nie uwzględnia wartości, tylko pozycje, podczas gdy RANGE definiuje okno w kategoriach zakresów wartości, a nie pozycji wierszy.
W przypadku RANGE musimy określić ORDER BY --column_name--, ponieważ w przeciwnym razie nie wiedziałoby, jak wybrać okno.
Na przykład:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGW tym miejscu tworzy okno, które obejmuje bieżący wiersz, poprzedni wiersz i następny wiersz.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsTworzy tu okno, które dla każdego poziomu (posortowanego rosnąco) obejmuje bieżący poziom, poziom przed nim i poziom po nim. Jeśli bieżący poziom to 5, obejmie poziomy 4, 5 i 6.
Uwaga: Użycie RANGE BETWEEN może spowodować uwzględnienie większej liczby wierszy w Twoim oknie, ponieważ obejmuje wszystkie wiersze, które mają takie same wartości jak te w zakresie, podczas gdy ROWS BETWEEN zawsze uwzględni tę samą liczbę wierszy (o ile są dostępne w zbiorze danych).
Ponadto RANGE nie obsługuje kolumn z datami.
Oto prosty przykład ilustrujący różnicę między ROWS a RANGE:
Używając ROWS:
SELECT employee_name, salary,
AVG(salary) OVER (
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
) as avg_salary_rowsKorzystanie z RANGE:
SELECT employee_name, salary,
AVG(salary) OVER (
ORDER BY salary
RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
) as avg_salary_rangeWyzwanie
ŁatwyDostępne tabele i kolumny:
newspapers:date,num_newspapers
Na potrzeby tego wyzwania mamy dane o gazetach przeznaczonych do produkcji. Chcemy poznać średnią liczbę gazet wydrukowanych dwa dni przed bieżącym wierszem i jeden dzień po nim. Chcemy również poznać różnicę między maksymalną a minimalną liczbą gazet wydrukowanych od bieżącej daty i przez trzy poprzedzające ją dni. Nazwij te kolumny odpowiednio avg_newspapers i diff_newspapers.
Spróbuj swoich sił
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Więcej słów kluczowych
Słowo kluczowe INSłowo kluczowe BETWEENSłowo kluczowe LIKESłowo kluczowe ASPowtórzenie – modele telefonów komórkowych2Instrukcje warunkowe
Podstawy instrukcji warunkowychSłowo kluczowe ANDSłowo kluczowe ORSłowo kluczowe NOTŁączenie wielu warunkówNawiasyWartości logiczne3Określony format zwracanych danych
Wartości nullSortowanie wyników — część 1Sortowanie wyników — część 2Powtórzenie — firma zajmująca się cyberbezpieczeństwemOgraniczanie liczby rekordówPowtórzenie — fabryka pojazdów6Wyzwania na początek
Powtórka – wybory parlamentarnePowtórka – zatrzymanie przestępcy przez policjęPowtórka – pojemnik na napój w barzePowtórka – inżynier: nowe kolumny9Wiele tabel
Podstawowe JOIN — część 1Podstawowe JOIN — część 2Powtórka — JOINSamozłączeniePowtórka — samozłączenieUNIONUprość zapytania — słowo kluczowe WITHPowtórka — zapytania WITHPowtórka — wykonawca z branży nieruchomości12Funkcje okna część 2
Funkcje RANK i DENSE_RANKPowtórzenie – RANK i DENSE_RANKFunkcja NTILEFunkcje agregująceKryterium ROWS i RANGEPoćwicz samodzielnie: Edytor online SQL