Lecții din modul (2/4)
Gruparea cu PARTITION BY
Gruparea cu PARTITION BY
Este util să ai calcule globale pe fiecare rând, dar adesea nu este suficient. Este posibil să dorim să calculăm media pe categorie sau per client, păstrând în același timp detaliile originale pe fiecare rând.
Aici intervine PARTITION BY din clauza OVER(...).
Cum funcționează PARTITION BY
Conceptual se comportă similar cu GROUP BY, dar în loc să restrângă rândurile din rezultat, definește doar limita „fereastră” de date pe care funcția va funcționa pentru a calcula rezultatul pentru un singur rând.
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;Fiecare rând de produse își păstrează propriile detalii, iar coloana cat_avg_price va afișa media limitată la produsele din aceeași categorie.
Din tabelul „produse”, extrageți „id”, „category_id” și „price”. Adăugați o coloană „category_total” care calculează SUMA „preț” pentru fiecare „category_id” folosind funcțiile ferestrei.
Afișează indiciu
Folosiți SUM(preț) OVER(PARTITION BY categorie_id).
Soluție disponibilă după 3 încercări
Din tabelul „reviews”, afișați „product_id”, „rating” și „avg_product_rating” (evaluarea medie împărțită în funcție de produs). Afișați toate rândurile.
Afișează indiciu
Utilizați AVG(evaluare) și PARTITION BY product_id. Transmiteți-o în NUMERIC dacă este necesar.
Soluție disponibilă după 3 încercări