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 max, group by [MySQL-5.7]


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 16
    Points : 22
    Points
    22
    Par défaut Requête max, group by
    Bonjour,
    Sur une requête un peu compliquée, je rencontre des problèmes de cohérence et là tout d'un coup, mes certitudes en prennent un coup.
    Je croyais qu'en matière de SQL je maitrisais. (depuis une trentaine d'année)
    mon but est de récupérer dans un fil de conversation, le texte du dernier post; mais si je retourne bien la dernière date (max), les informations associées ne correspondent pas au post sélectionné.
    Du coup j'essaie de valider des choses simples, avec un jeu de données plus basique que mes fils de discussions; prenons une base article.
    (comme on le retrouve dans plusieurs docs)
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT gif_id,gif_desc_fr,MAX(gif_gde_valpts) AS prixmax FROM gift
    devrait me retourner le code article, sa description et son prix pour l'article le plus cher

    gif_id gif_desc_fr prixmax
    3576 BESACE HOMME SAFARI ENCRE 1592

    Or ce n'est pas le cas du tout.
    si je trie mes articles en décroissant par prix (en mettant un limit 3), j'ai

    gif_id gif_desc_fr prixmax
    4568 CAVE A VIN 236 BOUTEILLES 1592
    4714 VELO COURSE HOMME ALU 1573
    4862 SMART TV 48" LED HD 3D 4K AMBILIGHT 1567

    l'article 3576 besace ... en fait à un prix de 262

    Bien sûr c'est pareil avec des group by

    Donc ces résultats me surprennent complètement
    Basiquement comment sortir son article le plus cher ?
    Ou alors j'ai un sérieux pb dans ma base. (myIsam)

    Merci de vos éclaircissements.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    mai 2002
    Messages
    8 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2002
    Messages : 8 914
    Points : 29 804
    Points
    29 804
    Par défaut
    Bonjour,

    Il n'y a que MySQL pour accepter une telle requête.
    Tous les autres SGBD la refuseront parce qu'il y manque la clause GROUP BY.
    MySQL ne relève pas d'erreur mais retourne... n'importe quoi.

    La question à laquelle tu cherches une réponse (le produit le plus cher) est un problème très classique en SQL.
    Il peut être résolu de différentes manières qui sont détaillées dans ce billet de blog : Sélectionner la ligne la plus récente pour un critère. Dans ton cas, il suffit de remplacer la date par le prix.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup pour ta réponse rapide !

    okay je comprends le principe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT gif_id,gif_desc_fr,MAX(gif_gde_valpts) AS prixmax 
    FROM gift 
    INNER JOIN (SELECT MAX(gif_gde_valpts) AS prixmax FROM gift) req
    WHERE gif_gde_valpts=req.prixmax
    donne bien la valeur attendue

    bon je me coucherai moins con ce soir
    mais surtout moins afficionado de mySQL (et ça c'est le plus dur)

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    mai 2002
    Messages
    8 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2002
    Messages : 8 914
    Points : 29 804
    Points
    29 804
    Par défaut
    Petites corrections :
    • Ligne 1 : le MAX est inutile, voire contre-productif
    • Ligne 4 : la condition de jointure doit être introduite par ON et non WHERE.


    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  gft.gif_id
        ,   gft.gif_desc_fr
        ,   gft.gif_gde_valpts AS prixmax
    FROM    gift    gft
        INNER JOIN
            (   SELECT  MAX(gif_gde_valpts) AS prixmax
                FROM    gift
            )   req
            ON  gft.gif_gde_valpts = req.prixmax
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Oui tu as raison pour tes 2 remarques
    c'est bien ainsi que je l'ai fait dans mon "vrai" cas
    Encore merci beaucoup de ton aide.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 982
    Points : 49 805
    Points
    49 805
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ROUMEG Voir le message
    ...
    mais surtout moins afficionado de mySQL (et ça c'est le plus dur)
    C'est le pire SGBD, en gros une daube catastrophique !

    A lire : https://blog.developpez.com/sqlpro/p...oudre_aux_yeux

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Problem requete avec MAX, GROUP BY ...
    Par alexthomas dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/11/2008, 16h58
  2. [Oracle] Requête avec GROUP BY
    Par bud_gw dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/07/2006, 11h26
  3. Requete avec group by
    Par zamilou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 31/03/2006, 09h37
  4. pb requete. probablement group by
    Par debdev dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/12/2005, 15h05
  5. Requete mysql group by
    Par yobogs dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/11/2005, 22h38

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