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 :

comment obtenir la valeur maximale d'une colonne pour chaque groupe


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut comment obtenir la valeur maximale d'une colonne pour chaque groupe
    Saluton,
    Je dois être plus vieux ou plus fatigué que je ne le croyais, car je n'arrive pas à me dépétrer de cette requête :
    J'ai une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `plafonds` (
      `GRUPO` char(8) NOT NULL default '',
      `ID` char(11) NOT NULL default '',
      `ECHELON` char(2) NOT NULL default '0',
      `INDICE` float(10,6) NOT NULL default '0.000000'
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Je souhaite obtenir, pour chaque GROUP GRUPO,ECHELON, l'INDICE maximal.
    J'ai essayé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `GRUPO`, `ID`,`ECHELON`,`INDICE`
    FROM `plafonds` 
    GROUP BY GRUPO, ECHELON
    ORDER BY GRUPO, ECHELON DESC, INDICE DESC
    mais l'INDICE retourné n'est pas le maximal de chaque GRUPO, ECHELON.
    Voyez-vous ce qui cloche dans ma requête ?
    Merci.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  2. #2
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199

  3. #3
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Oui, plus clairement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `GRUPO`, `ID`,`ECHELON`,MAX(`INDICE`)
    FROM `plafonds` 
    GROUP BY GRUPO, ECHELON
    ORDER BY GRUPO, ECHELON DESC, INDICE DESC
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Hélas, ce n'est pas si simple, telle quelle, la requête me retourne bien la valeur maximale de l'INDICE pour chaque GRUPO,ECHELON.

    Le problème c'est que l'ID appartient bien au GRUPO,ECHELON mais ne correspond pas à la valeur MAX(`INDICE`)
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Il y a 2 possibilités :

    - L'ID est forcément toujours le même pour un couple (GRUPO, ECHELON).
    Dans ce cas-là toutes les colonnes du SELECT doivent se retrouver dans le GROUP BY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `GRUPO`, `ID`,`ECHELON`,MAX(`INDICE`)
    FROM `plafonds` 
    GROUP BY GRUPO, ECHELON, ID
    ORDER BY GRUPO, ECHELON DESC, INDICE DESC
    - L'ID varie suivant les lignes pour un même couple (GRUPO, ECHELON).
    A ce moment-là ça ne rime à rien de sélectionner ID dans la requête, en effet MySQL ne sait pas laquelle de ses valeurs choisir et il en prend un aléatoire.

  6. #6
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Autant pour moi je n'avais pas vu l'ID dans la requête.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  7. #7
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par Maximilian
    Il y a 2 possibilités :

    - L'ID est forcément toujours le même pour un couple (GRUPO, ECHELON).
    Dans ce cas-là toutes les colonnes du SELECT doivent se retrouver dans le GROUP BY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `GRUPO`, `ID`,`ECHELON`,MAX(`INDICE`)
    FROM `plafonds` 
    GROUP BY GRUPO, ECHELON, ID
    ORDER BY GRUPO, ECHELON DESC, INDICE DESC
    - L'ID varie suivant les lignes pour un même couple (GRUPO, ECHELON).
    A ce moment-là ça ne rime à rien de sélectionner ID dans la requête, en effet MySQL ne sait pas laquelle de ses valeurs choisir et il en prend un aléatoire.
    Et il n'y a aucun moyen, quitte à passer par un sub-select ou une requête corrélée ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/06/2015, 09h52
  2. Réponses: 2
    Dernier message: 27/06/2014, 10h54
  3. comment remplir les valeurs nulles d'une colonne par des zeros '0'
    Par sinoun dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 21/09/2011, 16h38
  4. Réponses: 2
    Dernier message: 10/06/2009, 10h59
  5. Réponses: 2
    Dernier message: 26/01/2009, 15h38

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