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 :

Max pour plusieurs éléments dans une même table


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut Max pour plusieurs éléments dans une même table
    Bonjour,

    J'ai une table A où l'on peut faire correspondre une variable id avec un ou plusieurs nombres appelés Nombre (allant de 1 à 5).

    Pouvez-vous me dire comment m'y prendre pour obtenir le maximum du Nombre défini pour chaque id ?

    Par exemple, si la table contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id	Nombre
    1	1
    1	2
    2	1
    2	3
    Le résultat retourné sera
    Je tourne en rond, je n'arrive qu'a avoir un id et un 5 (le maximum de Nombre)

    Merci par avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Merci pour votre réponse,

    Plus de détails ici

    Bonne journée

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Je reviens à la charge :

    Comment faire pour n'obtenir que les id dont le Nombre max est égal à 4 par exemple ?

    Merci pour le temps consacré,

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    relisez le lien que je vous ai donné

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Trouvé, merci encore.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Je suis désolé mais je pensais avoir trouvé la solution mais il s'avère que j'avais tort.
    J'ai donc cherché sur d'autres sites (je ne trouve pas le lien que vous m'avez donné très explicite, je cherche peut-être au mauvais endroit, je m'y perds), et j'ai essayé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT ET.id, ET.nombre
    FROM A ET
    INNER JOIN
    (
        SELECT ET.id, MAX(ET.nombre) AS theMax
        FROM table ET
        GROUP BY ET.id
    ) rezz ON ET.id = rezz.id AND rezz.theMax = '4'
    Cependant j'ai encore une ligne qui pose problème

    Dans ma table, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id	|Nombre
    ------------------
    249	|2
    249	|1
    249	|1
    Et le résultat sortant est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id	|Nombre
    --------------
    249	|2
    249	|1
    Alors que je ne devrais avoir qu'une seule ligne. NB : j'ai d'autres colonnes dans ma table, mais elles ne devraient pas intervenir dans ma requête. id est une clé étrangère.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    la clause having permet de gérer votre cas.

    Pas besoin de sous requete.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    En essayant avec la clause HAVING, phpMyAdmin refuse ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, MAX(nombre)
    FROM A
    GROUP BY id
    HAVING (nombre) = '2'
    Unknown column 'nombre' in 'having clause'

    La plupart des autres requêtes que j'ai pu trouver mettaient le MAX dans une sous-requête.

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par Schwy Voir le message
    La plupart des autres requêtes que j'ai pu trouver mettaient le MAX dans une sous-requête.

    Et vous que cherchez-vous à faire ? pourquoi ne pas mettre le max ?

    Sinon un nombre n'est pas une chaine de caractere, je ne comprend pas bien pourquoi vous mettez entre simple quote le "2"

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Le max est bien dans ma requête, non ?

    Je résume ce que je cherche à faire :

    Je veux pouvoir sélectionner tous les id dont le nombre maximal est égal à un id que je détermine.

    Par exemple, avec la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    id	|Nombre
    --------------
    1	|3
    1	|2
    1	|3
    2	|1
    2	|4
    2	|2
    2	|1
    3	|4
    3	|1
    4	|1
    4	|3
    4	|2
    5	|4
    Si je précise que dans ma requête, je veux l'id qui a pour max 3, j'aurai alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id	|Nombre
    --------------
    1	|3
    4	|3
    J'ai du mettre des single quotes sur le "2" par automatisme, mais cela ne pose pas de problèmes lors de l'exécution. Mais je les enlèverai, merci.

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select id, max(nombre)
    from ma_table
    group by id
    having max(nombre) = 3

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Ah je vois, je ne savais pas que je pouvais utiliser le MAX dans la clause HAVING, tout s'éclaire maintenant.

    Merci infiniment !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/11/2012, 11h26
  2. Réponses: 4
    Dernier message: 21/11/2007, 12h19
  3. [MySQL] Conversion de plusieurs dates dans une même table MySQL
    Par laetiheu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/08/2007, 09h49
  4. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18
  5. TForm pour plusieurs fenêtre dans une même fonction ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/11/2005, 12h38

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