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

Grupowanie z PARTITION BY

Grupowanie za pomocą PARTITION BY

Posiadanie globalnych obliczeń w każdym wierszu jest przydatne, ale często nie wystarczy. Możemy chcieć obliczyć średnią na kategorię lub na klienta, zachowując oryginalne szczegóły w każdym wierszu.

W tym miejscu pojawia się PARTITION BY w klauzuli OVER(...).

Jak działa PARTYCJA BY

Koncepcyjnie zachowuje się podobnie do GROUP BY, ale zamiast zwijać wiersze w wyniku, definiuje jedynie granicę „okna” danych, na którym funkcja będzie działać w celu obliczenia wyniku dla pojedynczego wiersza.

SQL
SELECT
  product_name,
  category_id,
  price,
  AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;

Każdy wiersz produktu zawiera własne szczegóły, a kolumna cat_avg_price pokaże średnią ograniczoną do produktów w tej samej kategorii.

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

Z tabeli „produkty” wyodrębnij „id”, „kategoria_id” i „cena”. Dodaj kolumnę „kategoria_total”, obliczającą SUMĘ „ceny” dla każdego „id kategorii” za pomocą funkcji okna.

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

Użyj SUM(cena) OVER(PODZIAŁ WEDŁUG id kategorii).

Rozwiązanie dostępne po 3 próbach

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

W tabeli „recenzje” pokaż „id_produktu”, „ocenę” i „średnią ocenę_produktu” (średnią ocenę podzieloną według produktu). Pokaż wszystkie wiersze.

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

Użyj AVG(ocena) i PARTITION BY id_produktu. W razie potrzeby rzuć go na NUMERIC.

Rozwiązanie dostępne po 3 próbach