overview
le window functions calcolano aggregazioni senza collassare le righe, ideali per ranking e trend.
over e partition
select
user_id,
amount,
sum(amount) over (partition by user_id) as total_spent
from orders;
ranking
select
user_id,
amount,
row_number() over (order by amount desc) as rn
from orders;
usa dense_rank per evitare buchi nei ranking.
lag/lead
select
day,
revenue,
lag(revenue) over (order by day) as prev_day
from daily_kpi;
frame windows
select
day,
revenue,
avg(revenue) over (
order by day
rows between 6 preceding and current row
) as rolling_avg
from daily_kpi;
checklist finale
- usa partition per separare segmenti.
- controlla ranking con dense_rank.
- imposta frame per rolling metrics.
- testa performance con explain.
panoramica
In questo capitolo su window functions, analisi avanzata senza perdere righe con OVER e PARTITION. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: window analytics
obiettivi
- capire e applicare overview in uno scenario reale
- capire e applicare over e partition in uno scenario reale
- capire e applicare ranking in uno scenario reale
- capire e applicare lag/lead in uno scenario reale
scheda rapida
SELECT categoria, COUNT(*) AS tot
FROM prodotti
WHERE attivo = TRUE
GROUP BY categoria
ORDER BY tot DESC
LIMIT 5;
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
tips
- usa alias chiari
- filtra presto con WHERE
- controlla i piani di esecuzione
- partiziona con PARTITION BY
- ordina con ORDER BY
- usa ROWS BETWEEN
tip: Le window function leggono meglio di self-join complessi.
mini progetto
Classifica vendite con ranking.
- calcola rank per cliente
- aggiungi running total
- filtra i top
- verifica output
output atteso: uno script o query ripetibile con risultati verificabili.