Kryterium ROWS i RANGE
Lekcja 12 z 13 w kursie SQL dla zaawansowanych w Coddy.
Obecnie nie możemy elastycznie wybierać, ile wierszy przed bieżącym wierszem lub po nim uwzględnić. Teraz jest to możliwe dzięki kryteriom ROWS i RANGE. Aby ich użyć, zapisujemy:
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 i RANGE polega na tym, że kryterium ROWS nie uwzględnia wartości, a jedynie pozycje, natomiast RANGE określa okno na podstawie zakresów wartości, a nie pozycji wierszy.
W przypadku RANGE musimy określić ORDER BY --column_name--, ponieważ w przeciwnym razie nie będzie wiadomo, jak wybrać okno.
Na przykład:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGW tym przypadku tworzy okno obejmujące bieżący wiersz, wiersz przed nim i wiersz po nim.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsW tym przypadku tworzy okno obejmujące dla każdego poziomu (posortowanego rosnąco) bieżący poziom, jeden poziom przed nim i jeden poziom po nim. Jeśli bieżący poziom to 5, uwzględnione zostaną poziomy 4, 5 i 6.
Uwaga: Użycie RANGE BETWEEN może spowodować uwzględnienie większej liczby wierszy w oknie, ponieważ obejmuje wszystkie wiersze, których wartości mieszczą się w tym samym zakresie, natomiast ROWS BETWEEN zawsze uwzględnia tę samą liczbę wierszy (o ile są dostępne w zbiorze danych).
Ponadto RANGE nie obsługuje kolumn z datami.
Wyzwanie
ŁatwyW tym wyzwaniu mamy dane o produkcji gazet. Chcemy poznać średnią liczbę gazet wydrukowanych w ciągu dwóch dni przed bieżącym wierszem i jednego dnia po nim. Chcemy również poznać różnicę między maksymalną a minimalną liczbą gazet wydrukowanych od bieżącej daty i w ciągu trzech poprzedzających ją dni. Nazwij te kolumny odpowiednio avg_newspapers i diff_newspapers.
Spróbuj swoich sił
Wszystkie lekcje w sekcji SQL dla zaawansowanych
Poćwicz samodzielnie: Kompilator Python online