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.
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.
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.
Pokaż wskazówkę
Użyj SUM(cena) OVER(PODZIAŁ WEDŁUG id kategorii).
Rozwiązanie dostępne po 3 próbach
W tabeli „recenzje” pokaż „id_produktu”, „ocenę” i „średnią ocenę_produktu” (średnią ocenę podzieloną według produktu). Pokaż wszystkie wiersze.
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