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 :

Récupérer la valeur max ou min d'une sous requête


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Récupérer la valeur max ou min d'une sous requête
    bonjour, j'essayé en vains de récupérer la valeur d'une sous requête
    que voici :


    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
    16
    17
    18
    19
    20
    21
    Select
        coureur.prenom,
        coureur.nom,
        coureur.datedenaissance,
        Sum(resultatetape.temps) As total
      From
        resultatetape Inner Join
        coureur On resultatetape.idcoureur = coureur.dossard
      Where
        resultatetape.idcoureur Not In (Select
          resultatetape.idcoureur
        From
          resultatetape
        Where
          resultatetape.abandon = True
        Order By
          resultatetape.idcoureur)
      Group By
        coureur.prenom, coureur.nom, coureur.datedenaissance
      Having
        (coureur.datedenaissance) > '01/01/1986')
    j'ai essayé de mettre "select prenom, nom, max(total)
    from
    [...]) req
    group by prenom, nom
    "

    mais il me renvoie toutes les lignes

    Merci par avance pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    Pourriez-vous nous dire ce que la requête doit produire comme résultat ?

    Pourquoi avez vous besoin de max ou min ?

    Pourriez-vous décrire vos tables et vos données svp ?

    Une première erreur quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Having
        (coureur.datedenaissance) > '01/01/1986')
    Cette condition doit figurer dans la clausse where et non having.

  3. #3
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonsoir;

    Je suis étonné de la réponse de MacFly58 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Une première erreur quand même :
     
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Having
        (coureur.datedenaissance) > '01/01/1986')
    Cette condition doit figurer dans la clausse where et non having.
    Je croyais que les conditions de sélection portant sur les colonnes regroupées devaient être mises dans une clause Having.

    Pierre

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si j'ai compris votre requête, vous cherchez à avoir la somme des temps des coureurs nés après le 01/01/1986 pour les étapes dans lesquelles ils n'ont pas abandonné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT c.prenom, c.nom, c.datedenaissance,
        SUM(r.temps) AS temps_total
    FROM resultatetape r 
    INNER JOIN coureur c ON c.dossard = r.idcoureur
    WHERE c.datedenaissance > '1986-01-01'
        AND r.idcoureur NOT IN
        (
            SELECT DISTINCT idcoureur
            FROM resultatetape
            WHERE abandon = true
        )
    GROUP BY c.prenom, c.nom, c.datedenaissance
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par pier.antoine Voir le message
    Je croyais que les conditions de sélection portant sur les colonnes regroupées devaient être mises dans une clause Having.
    Justement non.
    La clause HAVING est à réserver aux conditions portant sur le résultat de fonctions d'agrégats comme MIN,MAX,...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coureur.datedenaissance > '01/01/1986'
    Cette condition est relative aux lignes de la table, donc elle va dans la clause Where.

    Le mot clé SQL situé juste après le Having doit être une fonction d'agrégat (qui est également présente (en généralement) dans le Select) : Count, Sum, Avg, Max, Min, Ecart type, etc.

    Ceci dit, sous MySQL, la requête de GhostSpirit aurait fonctionné sur ce point précis sans générer le moindre message d'erreur, et avec un résultat correct.

Discussions similaires

  1. [ADO.NET] récupérer la valeur de la clé d'une ligne insérée
    Par colombero dans le forum Accès aux données
    Réponses: 2
    Dernier message: 07/12/2006, 23h56
  2. Récupérer la valeur d'un champ dans une requête
    Par romaintaz dans le forum JDBC
    Réponses: 7
    Dernier message: 18/08/2006, 09h13
  3. Requête SQL : récupérer la valeur max
    Par Rodie dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 23/07/2006, 11h28
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Récupérer les valeur d'un énuméré dans une string
    Par Oliv_75 dans le forum SL & STL
    Réponses: 5
    Dernier message: 28/09/2005, 00h55

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