Vodafone, analizzare il traffico con SQL

Tags: 

Questa è la query MySQL da fare per caricare i dati esportati dal sito Vodafone (scegliendo di esportare dei CSV):

LOAD DATA LOCAL INFILE '#FILE#' INTO TABLE traffico FIELDS TERMINATED BY "," IGNORE 3 LINES (tipo, destinazione, numero, @DATA, @durata, costo, note, roaming, sim, tecnologia, operatore, volume_altri_op, volume_vlive) SET DATA = str_to_date(@DATA, '%d/%m/%Y %H:%i:%s'), durata = str_to_date(@durata, '%H:%i:%s');

Si presuppone di chiamare "traffico" la tabella risultate, e che al posto di #FILE# si metta il percorso al file esportato.

 

Dopo aver caricato tutti i dati, queste sono delle prime query per avere delle analisi indicative:

-- Riepilogo mensile per tipologia (voce, sms...)
SELECT date_format(DATA, '%Y%m'), tipo, SUM(costo), COUNT(*) FROM traffico WHERE DATA >= '2010-09-01' GROUP BY date_format(DATA, '%Y%m'), tipo;
-- Riepilogo per tipologia
SELECT tipo, SUM(costo), COUNT(*) FROM traffico WHERE DATA >= '2010-09-01' GROUP BY tipo;

 

Questa è una query molto più completa che mostra un riepilogo mensile delle varie parti di costo, e fornisce 4 colonne finali con alcune analisi di quanto avrei speso se avessi avuto attivo un particolare piano (nel caso specifico stavo esaminando una offerta che prevedeva un costo fisso di 19€ che includeva 100min di chiamate a 0.1 cent al minuto - il resto alla normale tariffa - e 100sms a 0.1 cent - il resto alla normale tariffa).

SELECT date_format(DATA, '%Y%m') AS p, 
SUM(IF(tipo = 'Chiamate voce e video',costo,0)) AS voce_price,
SUM(IF(tipo = 'Chiamate voce e video',1,0)) AS voce_no,
SUM(IF(tipo = 'Chiamate voce e video',time_to_sec(durata),0))/60 AS voce_min,
SUM(IF(tipo = 'Chiamate voce e video',costo,0)) / SUM(IF(tipo = 'Chiamate voce e video',time_to_sec(durata),0))*60 AS voce_price_min,
SUM(IF(tipo = 'Servizi di messaggistica',costo,0)) AS sms_price,
SUM(IF(tipo = 'Servizi di messaggistica',1,0)) AS sms_no,
SUM(IF(tipo = 'Servizi di messaggistica' OR tipo = 'Chiamate voce e video',costo,0)) AS vocesms_price,
SUM(IF(tipo = 'Servizi di messaggistica' OR tipo = 'Chiamate voce e video',0,costo)) AS other_price,
19 +
IF(
    SUM(IF(tipo = 'Chiamate voce e video',time_to_sec(durata),0))/60 < 100, 
    SUM(IF(tipo = 'Chiamate voce e video',time_to_sec(durata),0))/60, 
    100) * 0.01 +
IF(
    SUM(IF(tipo = 'Chiamate voce e video',time_to_sec(durata),0))/60 > 100, 
    SUM(IF(tipo = 'Chiamate voce e video',time_to_sec(durata),0))/60 - 100, 
    0) * 
    SUM(IF(tipo = 'Chiamate voce e video',costo,0)) / SUM(IF(tipo = 'Chiamate voce e video',time_to_sec(durata),0))*60 +
IF(
    SUM(IF(tipo = 'Servizi di messaggistica',1,0)) < 100,
    SUM(IF(tipo = 'Servizi di messaggistica',1,0)),
    100) * 0.01 +
IF(
    SUM(IF(tipo = 'Servizi di messaggistica',1,0)) > 100,
    SUM(IF(tipo = 'Servizi di messaggistica',1,0)) - 100,
    0) * 0.1 
AS new_price
FROM traffico 
GROUP BY date_format(DATA, '%Y%m');

Da notare che la simulazione "new_price" è solo un andamento che tende a quello reale: va considerato che il prezzo delle chiamate voce dipende dall'orario (con il mio piano spendo meno la sera e i festivi), consideralo realmente sarebbe stato complicato, quindi considero il costo chiamata sulla media mensile.

Aggiungi un commento

Scrivi la risposta in lettere (ad esempio "tre" e non "3")