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 :

GROUP BY et HAVING MAX


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Par défaut GROUP BY et HAVING MAX
    Voila, j'ai un problème avec une requète mysql.

    Sur une table du type ci-dessus, je voudrai remonter par marque la voiture qui a le plus de km au compteur sans faire de double select.

    Marque / Modele / Serie / Numero / Compteur
    Ford / Escort / Match / 8562 EV 23 / 42000
    Peugeot / 309 / chorus / 7647 ABY 82 / 189500
    Peugeot / 106 / KID / 7845 ZS 83 / 75600
    Renault / 18 / RL / 4698 SJ 45 / 123450
    Renault / Kangoo / RL / 4568 HD 16 / 56000
    Renault / Kangoo / RL / 6576 VE 38 / 12000

    ma requete est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Marque, Modele, Serie, Numero, Compteur
    FROM table
    GROUP BY marque HAVING MAX(Compteur)
    order by compteur
    Ford / Escort / Match / 8562 EV 23 / 42000
    Renault / 18 / RL / 4698 SJ 45 / 123450
    Peugeot / 309 / chorus / 7647 ABY 82 / 189500


    Et je n'obtiens pas la voiture avec le plus grand kilometrage...

    Je suis sous MySQL 5.0.21

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 433
    Billets dans le blog
    11
    Par défaut
    Salut,

    Dans ce cas là, il me semble qu'il faut que tu fasses un code dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Marque, max(Compteur) as compteur
    FROM TABLE
    GROUP BY marque
    Si tu as besoin de tout les champs, il faudra passer par un double select.


  3. #3
    Membre expérimenté Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Marque, Modele, Serie, Numero, Compteur
    FROM TABLE
    GROUP BY marque HAVING MAX(Compteur)
    ORDER BY compteur
    Euh... Si je ne m'abuse ça serait pas un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Marque, Modele, Serie, Numero, Compteur
    FROM TABLE
    GROUP BY marque 
    HAVING Compteur = (SELECT MAX(Compteur) FROM TABLE)
    ORDER BY compteur

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Par défaut Solution
    Je vous remercie pour vos réponses. En m'appuyant sur vos codes, j'ai réussi à trouver la requête...

    La voici pour info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Marque, Modele, Serie, Numero, Compteur
    FROM TABLE
    GROUP BY Marque 
    HAVING Compteur IN (SELECT MAX(Compteur) FROM TABLE GROUP BY Marque)
    ORDER BY Compteur

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 28
    Par défaut
    bonjour
    bon travail pour tenter de resoudre ce probleme en 1 passe. je me suis aussi cresé la tête dessus.

    dragoon ta requette est très bien, mais il me semble qu'avec le 1er "group by marque" cela ne fonctionne pas, à moins d'avoir de la "chance" du au faible nombre d'enregistrement (probleme de correspondance champs/ligne).

    au final j'y arrive de mon coté en reprenant ta requette sans le group by, ce qui revient à dire en pseudo code: je selectionne tout, et dans cette selection je garde les enregistrements dont la valeur de compteur figure dans le top des maxis par marque = je retrouve la ligne entière du maxi par marque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Marque, Modele, Serie, Numero, Compteur
    FROM TABLE
    HAVING Compteur IN (SELECT MAX(Compteur) FROM TABLE GROUP BY Marque)
    ORDER BY Compteur

    seul gros problème, ce n'est pas performant, voir carrement lent.

  6. #6
    Invité de passage
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 1
    Par défaut
    Citation Envoyé par zoom61 Voir le message
    Salut,

    Dans ce cas là, il me semble qu'il faut que tu fasses un code dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Marque, max(Compteur) as compteur
    FROM TABLE
    GROUP BY marque
    Si tu as besoin de tout les champs, il faudra passer par un double select.

    bonjour !

    je rebondis sur un poste de 2007....

    j'ai un soucis avec cette requête, ça me fout un peu les boules car je l'ai enseigné aujourd'hui à un élève en formation, et au moment de l'exemple ça n'a pas marché, elle sembles être 100% best pratice having + aggregate, je refais le test chez moi ça ne fonctionne pas non plus, obligé de passer par une double requête.. je suis sur sql server.

    quel est le problème ??

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,
    Citation Envoyé par drdriller Voir le message
    quel est le problème ??
    Heu... c'est exactement la question que j'allais vous poser !

    Avez vous un message d'erreur, les résultats ne sont pas ceux attendus ?

    Éventuellement, postez vos CREATE TABLE, INSERT INTO et décrivez votre problème.

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

Discussions similaires

  1. Group By + Having MAX impossible
    Par sebnutt dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/03/2012, 20h44
  2. Select max, group by et having
    Par Bram2 dans le forum Développement
    Réponses: 7
    Dernier message: 10/05/2010, 18h04
  3. Requête avec max(), group by et having. je m'y perds
    Par hispanus dans le forum SQLite
    Réponses: 3
    Dernier message: 11/02/2010, 15h29
  4. COUNT, GROUP BY et HAVING
    Par yobogs dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2007, 13h34
  5. GROUP BY et HAVING dans un UPDATE
    Par MashiMaro dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2003, 08h03

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