Relevez le défi - SQL pour loterie

bergueira Messages postés 2 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 26 septembre 2005 - 16 sept. 2005 à 17:42
DuckyLuke Messages postés 28 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 30 septembre 2005 - 27 sept. 2005 à 09:49
Bonjour.

J' ai mis en sujet 'Relevez le défi car je crois que c' est vraiment un défi ce que je vaux ! ;) ).

J' ai besoin d'un query (en SQL pour la placer dans mon code java qui se connecte à une base de données MySql) qui me permette de selectionner les gagnants des concours.
- Chaque joueur selecctionne 6 numéros (C1, C2, C3, C4, C5, C6) par bulettin;
- Le tirage a 6 numéros (N1, N2, N3, N4, N5, N6);
- Il y a les classements suivants:
* Premier prix: les joueurs qui ont les 6 numéros;
* Deuxième prix: les joueurs qui ont 5 numéros;
* Troisième prix: les joueurs qui ont 4 numéros;
* Quatrième prix: les joueurs qui ont 2 numéros;

J' aimerais avoir comme résultats les bulletins avec leur prix correspondant; Atention qu' un seul prix (le plus haut) ne peut-être présenté par bulletin (et non pas, par exemple, un deuxième prix + 3 troisième prix + 12 quatrième prix).

Merci d' avance à tous.


Carlos Bergueira
A voir également:

3 réponses

DuckyLuke Messages postés 28 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 30 septembre 2005
26 sept. 2005 à 16:35
Voilà une solution possible:

La première requête crée une table temporaire (écrase la table existante si elle existe déjà) avec le nom du joueur et 6 colonnes.
Dans la première colonne, on met 1 si le numéro correspond à un numéro de la table tirage. Sinon, on met 0
On fait parait avec les 5 autres colonnes...

Ensuite on lance une requête sur la table temporaire créée pour afficher les joueurs gagnants. (On filtre sur 3 numéros trouvés minimum)

-- *****Création de la table d'analyse des tirages*****
SELECT nom,
(IIF(C1 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) AS EXPR1,
(IIF(C2 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) AS EXPR2,
(IIF(C3 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) AS EXPR3,
(IIF(C4 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) AS EXPR4,
(IIF(C5 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) AS EXPR5,
(IIF(C6 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) AS EXPR6
INTO TEMP_TABLE
FROM joueur, tirage
;


-- *****Affichage des résultats par joueurs gagnants (par nombres de numéros trouvés)*****
SELECT nom, SUM(EXPR1 + EXPR2 + EXPR3 + EXPR4 + EXPR5 + EXPR6) As NB_NUM
FROM TEMP_TABLE
GROUP BY nom
HAVING Sum(EXPR1+EXPR2+EXPR3+EXPR4+EXPR5+EXPR6) > 2
ORDER BY Sum(EXPR1+EXPR2+EXPR3+EXPR4+EXPR5+EXPR6) DESC
;



Voilà voilà... pas très compliqué... :P
0
bergueira Messages postés 2 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 26 septembre 2005
26 sept. 2005 à 18:46
Je te remercie pour ton aide, mais ce que je veux est un peu plus 'complexe'.
Je veux un query optimizé. Trés très rapide !
En créant une table je perds bcp de temps; c' est une des possibilitées mais ce n' est pas la plus rapide.

Je te remercie quand même pour ton aide !

Si qq a une autre idée... je suis prennant ! ;)

Merci.


Carlos Bergueira
0
DuckyLuke Messages postés 28 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 30 septembre 2005
27 sept. 2005 à 09:49
Si tu ne donnes pas toutes les infos tu peux pas t'attendre à avoir la bonne réponse du premier coup...

Si tu creuses un peu la requête ci-dessus, tu arriveras vite au résultat suivant:

SELECT nom,
SUM(
(IIF(C1 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C2 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C3 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C4 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C5 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C6 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0))
) AS NB_NUM
FROM joueur, tirage
GROUP BY nom
ORDER BY SUM(
(IIF(C1 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C2 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C3 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C4 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C5 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0)) +
(IIF(C6 In ([N1],[N2],[N3],[N4],[N5],[N6]), 1, 0))
) DESC
;




Facile... :P
0
Rejoignez-nous