Le window functions (o analytics functions) sono uno di quei concetti SQL che separano chi sa estrarre dati da chi sa costruire analisi. Il punto di partenza è capire come differiscono dalle aggregate function.
Aggregate vs window
Una window function restituisce valori aggregati come SUM(), COUNT() o MAX(), ma non collassa il result set: il numero di righe in output è uguale a quello in input. L’anatomia base ha tre parti: la funzione di aggregazione, la clausola PARTITION BY (concettualmente una GROUP BY che non raggruppa le righe) e ORDER BY, che conta quando l’ordine dell’output è rilevante.
Le cinque funzioni
- ROW_NUMBER() assegna un numero progressivo a ogni riga, partendo da 1. Utile per isolare il primo o l’ultimo record: PARTITION BY cliente, ORDER BY data d’acquisto, poi filtra WHERE row number = 1 per la prima transazione di ciascun cliente.
- SUM() usata come window function calcola somme cumulate: perfetta per grafici che mostrano la crescita di una metrica (ordini, ricavi) nel tempo.
- AVG() abilita le moving average: ad esempio la media mobile a 5 giorni delle vendite, o la spesa media dei clienti.
- LEAD() / LAG() confrontano il valore di righe successive o precedenti. Sono lo strumento naturale per confrontare un periodo con quello precedente: ricavi mese su mese, crescita percentuale delle iscrizioni, variazione del churn.
- DENSE_RANK() è simile a ROW_NUMBER(), ma assegna lo stesso rank ai valori uguali: la scelta giusta per classifiche, come i top cliente per fatturato totale.
Perché conta
Questi cinque pattern coprono gran parte del lavoro analitico ricorrente nelle operations: primo/ultimo evento, cumulati, medie mobili, delta tra periodi e ranking. Non esauriscono le window functions, ma sono il set che porta più lontano con lo sforzo minore, ed evitano subquery e join contorti per calcoli che dovrebbero essere semplici.
In sintesi
- Le window functions aggregano senza collassare le righe: stesso numero di righe in input e in output.
- PARTITION BY e ORDER BY governano il comportamento; padroneggiarli è la parte concettuale chiave.
- ROW_NUMBER, SUM, AVG, LEAD/LAG e DENSE_RANK coprono la maggior parte dei casi d’uso operativi.
Fonte: Essential SQL window functions for business operations — https://www.fivetran.com/blog/5-essential-sql-window-functions-for-business-operations
Hai qualcosa da aggiungere? Unisciti alla discussione.