Vai al contenuto
eLearner.app
Modulo 13 · Lezione 2 di 450/57 nel corso~15 min
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.

SQL
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.

Esercizio#sql.m13.l2.e1
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

Usa SUM(price) OVER(PARTITION BY category_id).

Soluzione disponibile dopo 3 tentativi

Esercizio#sql.m13.l2.e2
Tentativi: 0Caricamento…

Dalla tabella 'reviews', mostra 'product_id', 'rating' e il 'avg_product_rating' (la media dei rating partizionata per prodotto). Mostra tutti.

Caricamento editor…
Mostra suggerimento

Usa AVG(rating) e PARTITION BY product_id. Castalo a NUMERIC se serve.

Soluzione disponibile dopo 3 tentativi