Przejdź do głównej treści
eLearner.app
Moduł 13 · Lekcja 1 z 449/57 w kursie~15 min
Lekcje modułu (1/4)

Wprowadzenie i klauzula OVER

Wprowadzenie i klauzula OVER

W poprzednich lekcjach widzieliśmy, jak używać GROUP BY do agregowania danych. Jednak GROUP BY ma ogromne ograniczenie: zwija wiersze. Jeśli grupujesz według miast, otrzymasz jeden wiersz na miasto i utracisz dane poszczególnych klientów.

Tutaj w grę wchodzą Funkcje okna. Umożliwiają przeprowadzanie obliczeń zbiorczych (takich jak sumy lub średnie) przy zachowaniu oryginalnych wierszy.

Klauzula OVER().

Magicznym słowem kluczowym jest OVER(). Informuje bazę danych, że funkcję agregującą (np. SUM, AVG, COUNT) należy traktować jako funkcję okna, obliczaną dla całego zestawu wyników („globalnego „okna”), ale stosowaną i zwracaną w każdym pojedynczym wierszu.

SQL
SELECT
  order_id,
  total_amount,
  AVG(total_amount) OVER() AS global_average
FROM orders;

W tym przykładzie zachowujemy każde indywidualne zamówienie, ale w każdym wierszu znajduje się także kolumna global_average ze średnią wszystkich zamówień. Bardzo przydatne, na przykład do pomiaru, jak bardzo zamówienie odbiega od średniej!

Ćwiczenie#sql.m13.l1.e1
Próby: 0Ładowanie...

Wybierz kolumnę „cena” z tabeli „produkty”. Dodaj kolumnę o nazwie „global_max_price” zawierającą cenę maksymalną obliczoną za pomocą funkcji okna dla całej tabeli.

Ładowanie edytora...
Pokaż wskazówkę

Użyj MAX(cena) w połączeniu z OVER().

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#sql.m13.l1.e2
Próby: 0Ładowanie...

Wyodrębnij „id”, „cenę” i dodaj ogólną średnią cenę („global_avg”) z tabeli „produkty”.

Ładowanie edytora...
Pokaż wskazówkę

Po prostu dodaj AVG(cena) OVER().

Rozwiązanie dostępne po 3 próbach