Scopo

Le funzioni analitiche permettono di applicare le funzioni di aggregazione a sottoinsiemi di record, eventualmente ordinati in base a valori specificati.
Questo permette di calcolare funzioni cumulative (tipicamente, ma non unicamente, la somma), di calcolare classifiche in base a indicatori specificati etc.

Componenti di una funzione analitica

OVER()

Specifica l'insieme di righe sulle quali calcolare la funzione aggregata (o di rank).
Se non si specifica alcun argomento, l'insieme delle righe coincide con quello della tabella di origine.

-- sono equivalenti:
SUM(misura) OVER ()
SUM(misura) 

Se l'argomento di OVER() č un ordinamento, la funzione di aggregazione sarā applicata alle righe man mano ordinate e produrrā una aggregazione cumulata.

-- somma cumulata della misura, ordinata per dimensione_1, dimensione_2:
SUM(misura) OVER (ORDER BY dimensione_1, dimensione_2)

-- esempio: somma cumulata del venduto, ordinata per anno e mese
SELECT SUM(venduto) OVER (ORDER BY anno, mese) sc_venduto
FROM vendite

-- classifica (rank) delle vendite:
SELECT RANK() OVER (ORDER BY venduto) rank
FROM vendite

PARTITION BY()

All'interno di OVER(), la clausola PARTITION specifica le dimensioni per le quali raggruppare le righe dell'insieme da valutare.

Abbinata con la clausola ORDER BY, permette di calcolare una funzione cumulata all'interno di singoli raggruppamenti. Il calcolo della funziona cumulata ripartirā da zero all'inizio di ogni nuovo raggruppamento.

-- calcolo dei totali parziali per singolo negozio:
SELECT SUM(venduto) OVER(PARTITION BY cd_negozio)
FROM vendite

-- calcolo delle vendite cumulate per anno e mese, per ciascun singolo negozio:
SELECT SUM(venduto) OVER(
    PARTITION BY cd_negozio 
    ORDER BY anno, mese
    ) sc_venduto
FROM vendite

ORDER BY()