Lezioni del modulo (2/4)
Raggruppamenti con PARTITION BY
Raggruppamenti con PARTITION BY
Avere calcoli globali in ogni riga è comodo, ma spesso non basta. Potremmo voler calcolare la media per categoria o per cliente, mantenendo in ogni riga il dettaglio originale.
È qui che subentra PARTITION BY dentro alla clausola OVER(...).
Come funziona PARTITION BY
Si comporta in modo concettualmente simile a GROUP BY, ma invece di collassare le righe nel risultato, definisce solo il confine della "finestra" di dati su cui la funzione opererà per calcolare il risultato della singola riga.
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;Ogni riga di prodotto manterrà le sue peculiarità, e la colonna cat_avg_price mostrerà la media limitata ai prodotti della sua stessa categoria.
Dalla tabella 'products', estrai 'id', 'category_id' e 'price'. Aggiungi una colonna 'category_total' calcolando la SOMMA di 'price' per ogni 'category_id' usando le funzioni finestra.
Mostra suggerimento
Usa SUM(price) OVER(PARTITION BY category_id).
Soluzione disponibile dopo 3 tentativi
Dalla tabella 'reviews', mostra 'product_id', 'rating' e il 'avg_product_rating' (la media dei rating partizionata per prodotto). Mostra tutti.
Mostra suggerimento
Usa AVG(rating) e PARTITION BY product_id. Castalo a NUMERIC se serve.
Soluzione disponibile dopo 3 tentativi