Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2010, 13h04   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Par défaut problème count et group by

Bonjour,
Je n'arrive pas à calculer un pourcentage avec un group by.
A propos du poker, j'aimerais calculer pour chaque joueur, le pourcentage de mains jouées sur le nombre total où il a relancé ('raise') au tour preflop.
Mes tables sont: Action(IDAction,IDJoueur,IDTour,TypeAction,Montant), Participe(IDJoueur,IDMain,Position,Gagnant), j'ai crée une vue _nbmainsjouees qui calcule pour chaque joueur le nombre de mains totales qu'il a participé.

Voila ce que j'ai fait:

Code :
1
2
3
4
5
6
7
8
CREATE VIEW _PFR AS
     SELECT _nbmainsjouees.IDJoueur, IFNULL(COUNT(DISTINCT P.IDMain)/nbmainsjouees,0) AS pourcentage_raise_au_preflop
     FROM Participe AS P, _nbmainsjouees
     WHERE P.IDMain IN   (SELECT P.IDMain
                 FROM participe AS P, action AS A
                 WHERE A.IDTour = 1
                 AND TypeAction = 'raise' )
   GROUP BY _nbmainsjouees.IDJoueur

Je ne sais pas si ça vaut quelque chose mais en tout cas il ne me renvoie aucun enregistrement alors que j'aimerai obtenir pour chaque joueur un pourcentage, meme s'il est égal à 0.

Ca serait vraiment simpa si quelqu'un pouvait m'éclairer!

olivt0603,
olivt0603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 14h11   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Apparemment, tu ne connais pas les jointures !
Quelle est la structure de la vue _nbmainsjouees ? Ou même carrément son code parce qu'il y a peut-être moyen d'optimiser l'ensemble.

J'ai aussi du mal à voir ce qui relie précisément Action et Participe.
On pourrait faire cette jointure :
Code :
1
2
FROM Participe AS P
INNER JOIN action AS A ON A.IDJoueur = P.IDJOUEUR
Mais j'ai l'impression qu'il y aura toutes les actions d'un joueur et pas seulement celles de la main considérée. A moins que P.IDMain trouve son équivalent dans A.IDTour ? Auquel cas, pourquoi avoir changé de nom d'une table à l'autre ?

Ta requête pourrait donner quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
SELECT _nbmainsjouees.IDJoueur, 
  COALESCE(COUNT(DISTINCT P.IDMain) / m.nbmainsjouees, 0) AS pourcentage_raise_au_preflop
FROM Participe AS P
LEFT OUTER JOIN action AS A ON A.IDJoueur = P.IDJoueur
LEFT OUTER JOIN _nbmainsjouees AS m ON m.IDJoueur = P.IDJoueur
WHERE A.IDTour = 1
  AND A.TypeAction = 'raise'
GROUP BY _nbmainsjouees.IDJoueur
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 14h56   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Merci pour ta réponse rapide!
Effectivement j'ai du mal à gerer les jointures.
Ta requête ne me renvoie toujours rien. Ce que j'aimerais c'est que ça affiche le pourcentage pour chaque joueur, meme s'il est nul.

Voici le code de ma vue:

Code :
1
2
3
4
CREATE VIEW _nbmainsjouees AS
                            SELECT IDJoueur, COUNT(DISTINCT IDMain) AS nbmainsjouees
                            FROM participe
                            GROUP BY IDJoueur
IDTour est juste l'ID du tour où on est: 1 pour preflop, 2 pour flop,... dans une main.
IDMain c'est le numero de la main dans une partie.
olivt0603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 15h13   #4
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
En fait le problème je pense, c'est que je voudrais avoir tous les joueurs dans mon résultat qu'ils respectent ou pas la condition, c'est pour ça que j'ai essayé de faire une requete imbriquée.
olivt0603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h09.


 
 
 
 
Partenaires

Hébergement Web