Superenalotto, TSQL e combinazioni vincenti

Published 16 ottobre 08 11.53 | abenedetti

Stimolato da un commento sul mio post precedente provo a postare una soluzione per verificare quante e quali combinazioni sono vincenti.

Supponendo di avere la nostra tabella [enalotto] con 100.000 righe (i numeri di ciascuna riga non sono ordinati, se voglio ordinarli userò la select mostrata nel post precedente) vediamo di trovare i numeri che ho azzeccatto sull'ultima estrazione.

Per farlo possiamo ragionare in questo modo: controllo, per ciascuna colonna, se il suo valore risulta essere nella lista delle palline vincenti. Se trovo il valore sommo 1 in modo tale da avere, per ciascuna riga, il numero di "cifre" azzeccate.

/* Estrazione del 14.10: 11 14 43 46 61 70 */ declare @numEstratto1 tinyint declare @numEstratto2 tinyint declare @numEstratto3 tinyint declare @numEstratto4 tinyint declare @numEstratto5 tinyint declare @numEstratto6 tinyint set @numEstratto1 = 11 set @numEstratto2 = 14 set @numEstratto3 = 43 set @numEstratto4 = 46 set @numEstratto5 = 61 set @numEstratto6 = 70 --> vedo solo le giocate in cui ho azzeccato più di due cifre: select * from ( select idRecord, num1, num2, num3, num4, num5, num6, case when num1 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num2 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num3 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num4 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num5 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num6 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end as numeriAzzeccati from enalotto ) T where numeriAzzeccati > 2 order by numeriAzzeccati desc

Questo il risultato:

image

Se volessi vedere anche il totale delle combinazioni fatte:

--> in totale, quante combinazioni ho fatto? select count(numeriAzzeccati) as numGiocate, numeriAzzeccati from ( select idRecord, num1, num2, num3, num4, num5, num6, case when num1 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num2 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num3 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num4 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num5 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end + case when num6 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end as numeriAzzeccati from enalotto ) T group by numeriAzzeccati order by numeriAzzeccati

Il risultato:

image

Insomma: avrei speso un sacco di soldi e ne avrei vinti veramente pochi... :-)

Filed under:

Comments

# ibrusett said on ottobre 16, 2008 01.45 :

Come al solito bisogna ragionare nel modo giusto!

Io avevo spaccato la tua Case in 6 select annidate per fare la stessa cosa...

Devo applicarmi di più e lasciar perdere Facebook...

# AlessandroD said on ottobre 20, 2008 02.17 :

mmmmh, si potrebbe fare il porting dello script di generazione dei numeri anche su altri engine (Oracle, MySQL, ...) per eleggere l'engine più fortunato! :-D

Una nuova feature insomma, tipo "superenalotto certified", altro che per ridere, se fossi un commerciale mica sarebbe una brutta idea per spingere un prodoto... no?

This Blog

Syndication