Il titolo è molto generico e potrebbe far pensare a chissà quale tipo di analisi 🙂 Premetto non sono un data scientist né tantomeno ci vado vicino, vorrei solo dare qualche spunto per poter fare qualche considerazione sui dati raccolti da un’applicazione.
Vorrei parlare di media, mediana, varianza/deviazione standard e dei percentili.
Ci sono molte situazioni in cui ci viene chiesto di calcolare almeno una di queste informazioni, basti pensare a tabelle di metriche dove magari vogliamo recuperare i tempi medi di alcune operazioni, oppure mi vengono in mente le classiche situazioni di vendita dove ci interessa capire come si comporta il prezzo di un prodotto e di conseguenza la sua vendita.
Difficile parlare di questi comandi SQL senza lavorare su un caso d’uso reale.
Lo script è molto piccolo, crea un database di appoggio nel quale va ad aggiungere una semplice tabella di metriche per la raccolta dei tempi di alcune operazioni di un’immaginaria catena produttiva.
use [master];
go
drop database AnalisiDati;
go
-- creazione database
create database AnalisiDati
go
use [AnalisiDati]
go
create table MetricheProduzione (
Id int identity(1,1),
Operazione varchar(36) not null,
DurataSecondi int null
);
go
-- inseriamo alcuni valori randomici
insert into MetricheProduzione(Operazione, DurataSecondi)
select 'OPERAZIONE_A', abs(checksum(newid()))%10000
from
sys.objects s1, sys.objects s2
insert into MetricheProduzione(Operazione, DurataSecondi)
select 'OPERAZIONE_B', abs(checksum(newid()))%10
from
sys.objects s1, sys.objects s2
select
Operazione,
min(DurataSecondi) as Min, -- valore minimo
max(DurataSecondi) as Max, -- valore massimo
avg(DurataSecondi) as Avg, -- media aritmetica
var(DurataSecondi) as Var, -- varianza
stdev(DurataSecondi) as StdDEv -- deviazione standard
from MetricheProduzione group by Operazione;
select distinct
Operazione,
PERCENTILE_DISC(0.10) within group (order by DurataSecondi) over (partition by Operazione) as [10Perc],
PERCENTILE_DISC(0.25) within group (order by DurataSecondi) over (partition by Operazione) as [25Perc],
PERCENTILE_DISC(0.50) within group (order by DurataSecondi) over (partition by Operazione) as [50Perc],
PERCENTILE_DISC(0.75) within group (order by DurataSecondi) over (partition by Operazione) as [75Perc],
PERCENTILE_DISC(0.99) within group (order by DurataSecondi) over (partition by Operazione) as [99Perc]
from MetricheProduzione