Window functions eseguono calcoli su un insieme di righe (una "finestra") correlate alla riga corrente, senza comprimerle in una singola riga di output (a differenza degli aggregati con GROUP BY). Consentono analisi potenti — totali progressivi, ranking, confronti con altre righe — mantenendo ogni riga nel risultato.
La differenza chiave rispetto a GROUP BY
GROUP BY → collapses groups into ONE row each (you lose individual rows)
Window function → computes across related rows but KEEPS every row
→ You get per-row detail AND aggregate/ranking info together.
