IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête SELECT COUNT MAX


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Requête SELECT COUNT MAX
    Bonjour à tous,
    voici ma table
    Prenom | game_id | points
    Pierre | 1 | 45
    Tom | 1 | 22
    Jean | 1 | 44
    Pierre | 2 | 35
    Tom | 2 | 33
    Jean | 2 | 30

    Je n'arrive pas à créer un requête qui permet de savoir par exemple combien de fois Pierre a fait le meilleur score (dans mon exemple, il a eu 2 fois le meilleur score aux jeux).
    Je ne sais pas comment faire cette requete...
    MErci à tous de vos idées !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Avec mysql il faut passer par une sous requête qui détermine d'abord le max de points par game_id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     select t.prenom, count(*)
      from latable t
      join (select game_id, max(points) as max_point)
              from latable
             group by game_id) t2
        on t.game_id = t2.game_id and t.points = t2.max_point
     where t.prenom = 'pierre'
     group by t.prenom

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Impec, je viens de tester.... Ca marche !
    Merci beaucoup de ton aide !

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Tu peux aussi sélectionner les lignes pour lesquelles personne n'a obtenu un meilleur score :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT t.prenom, count(*)
    FROM latable t
    WHERE t.prenom = 'pierre'
    AND NOT EXISTS 
    ( 
      SELECT 1 
      FROM latable t2
      WHERE t.game_id=t2.game_id
      AND t.points < t2.points
    )
    GROUP BY t.prenom
    PS:
    La requête de Skuatamad est probablement plus performante.

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci Fred pour ta réponse aussi Elle peut etre utile !
    juste une petite erreur de parenthèse de Skuatamad que nous devons enlever.

    SELECT t.prenom, count(*)
    FROM latable t
    JOIN (SELECT game_id, max(points) AS max_point)
    FROM latable
    GROUP BY game_id) t2
    ON t.game_id = t2.game_id AND t.points = t2.max_point
    WHERE t.prenom = 'pierre'
    GROUP BY t.prenom

    Merci beaucoup en tout cas

  6. #6
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonsoir, une dernière question s'il vous plait...
    en PHP, une fois que j'ai mis cette requete dans une variable $var
    comment je fais pour l'afficher après mon :
    $query = mysql_query($var);

    Merci

  7. #7
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 803
    Points : 34 074
    Points
    34 074
    Billets dans le blog
    14
    Par défaut
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $sql = "
    	SELECT t.prenom, count(*) AS nb
    	FROM latable t
    	INNER JOIN 
    	(
    		SELECT game_id, 
    			max(points) AS max_point
    		FROM latable
    		GROUP BY game_id
    	) t2
    		ON t.game_id = t2.game_id 
    		AND t.points = t2.max_point
    	WHERE t.prenom = 'pierre'
    	GROUP BY t.prenom
    ";
     
    $result = mysql_query($sql);
     
    if(mysql_num_rows($result) > 0)
    {
    	$row = mysql_fetch_array($result);
     
    	// ensuite tu traites les données retournées par la requête
    	$nb = $row['nb'];
    }

Discussions similaires

  1. Résultat d'une requête SELECT COUNT
    Par Bktero dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/10/2010, 14h01
  2. [AC-2003] Requête SELECT COUNT(*)
    Par Shankara dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 03/06/2009, 05h04
  3. Requête complexe : COUNT - MAX
    Par MikeV dans le forum Requêtes
    Réponses: 14
    Dernier message: 23/09/2008, 13h37
  4. Réponses: 21
    Dernier message: 03/08/2007, 13h19
  5. [Débutant] Requête SELECT avec max et sous-requête
    Par joefou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo