Iniziamo a conoscere funzioni analitiche di Oracle

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , , , | Posted on 22:27

Parliamo di SQL e di aggregazione di dati.
Queste funzioni sono poco conosciute, ma estremamente utili, in quanto potenti e veloci.
Cosa fanno?

Parecchie cose. L'uso più comune è il calcolo di progressivi (Running Totals).
Un esempio? Gli estratti conto bancari con i saldi a fianco.
Se hai un conto un banca li conosci di sicuro.

Come si fa?

select data, descrizione, importo, 
sum(importo) over (partition by 1 order by data) saldo_prog
from movimenti_banca where correntista=me_stesso order by data

L'istruzione chiave è:
sum(importo) over (partition by 1 order by data)
con cui:
  • chiediamo al DB di considerare una partizione (insieme, finestra) di dati pari a tutta la query (partition by 1) ordinata per data movimento,
  • e di utilizzare la funzione di gruppo (somma) via via in progressione.

Per chiarire il concetto di partizione o finestra, complichiamo un po' la nostra query:

select correntista, data, descrizione, importo, 
sum(importo) over (partition by correntista order by data) saldo_prog 
from movimenti_banca order by correntista , data

La finestra, in questo caso, è quella dei movimenti di ogni singolo correntista.

In questo modo riusciamo ad ottenere, in una sola interrogazione, sia i dati di dettaglio che le sintesi (o aggregazioni) di cui abbiamo bisogno.

Facile, efficiente e veloce.

Comments Posted (0)

Posta un commento