Funzioni analitiche Oracle per stilare delle classifiche (ranking)

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , | Posted on 13:25

Vi è mai capitato di dover individuare i migliori performer tra il personale di vendita di una azienda?

Come avete fatto?
Probabilmente con una istruzione del tipo:

select rownum, venditore, tot_ordinato from vendite order by tot_ordinato desc

Peccato che, se la classifica andasse suddivisa per regioni o per gruppi di prodotti, questa tecnica non potrebbe più funzionare...


Ecco l'istruzione SQL più efficiente:

SELECT venditore, regione,  dense_rank() over (partition by regione order by tot_ordinato desc) as classifica
from vendite  ORDER BY regione, classifica


Oltre a rank ci sono dense_rank e row_number; ci sono piccole differenze tra loro...

E se poi vi chiedessero di avere le differenze di ordinato tra un venditore ed il precedente (o il successivo, il primo o l'ultimo) in classifica?
Niente paura:

SELECT venditore, regione, dense_rank() over (partition by regione order by tot_ordinato desc) classifica
, LEAD(
tot_ordinato, 1, 0) OVER (partition by regione order by tot_ordinato desc) valore_success_inferiore
, LAG(
tot_ordinato, 1, 0) OVER (partition by regione order by tot_ordinato desc) valore_preced_superiore
from Vendite  order by regione, classifica;


I parametri delle funzioni Lead e Lag sono:
  • tot_ordinato: il campo della tabella o una espressione sql più complessa
  • 1: l'offset dalla riga corrente
  • 0: valore di default se il tot_ordinato è nullo
In pratica i due parametri strani sono quasi sempre 1 e 0.

C'è molto di più di quanto spiegato; ma una volta compresi i meccanismi illustrati nei due post, tutto il resto (se vi serve) è semplice.
Comunque vi abbiamo descritto quello che è utile usare nella maggioranza dei casi.


Oracle avanzato in pillole

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in | Posted on 03:48

Con il database Oracle si possono realizzare molte funzionalità applicative avanzate e performanti, in gran parte sconosciute ai più.
La documentazione esiste, anche in rete, ma spesso non è di agevole lettura, soprattutto per chi non lavora da anni in questo ambito.

Oracle è un bellissimo sistema ma continua da essere, purtroppo, per un elite di esperti.

Il nostro obiettivo è quello di spiegare cosa si possa fare con concetti ed esempi immediati, ma soprattutto in estrema sintesi.
In questa ottica scriveremo una serie di articoli su argomenti interessanti e poco noti in modo conciso e lineare.

Giusto quello che serve per decidere sa valga la pena approfondire ed utilizzare.

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.