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

Langage SQL Discussion :

Utiliser la fonction MAX() dans la condition du WHERE


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut Utiliser la fonction MAX() dans la condition du WHERE
    Bonjour,

    Dans ma table SQL (je travaille sur MYSQL) j'ai des lignes qui ont la même valeur pour la colonne nom, mais différentes pour la colonne nombre.

    Par exemple

    id nom nombre
    1 AA 50
    2 AA 200
    3 AA 400

    Je veux avoir le nom qui a le plus grand nombre, mais je n'arrive pas à écrire la requête SQL. J'ai commencé a faire des freestyles sur MySQL mais ça marche pas, comme par exemple WHERE nom ='AA' AND nombre = MAX(nombre). J'avoue que je ne suis pas très fort coté SQL, pouvez vous donc m'aider avec cette requête ?


    ...

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

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 788
    Points
    30 788
    Par défaut
    Pour filtrer une requête sur une fonction de regroupement, il faut utiliser la clause HAVING et non la clause WHERE.
    Tu peux aller consulter ce tutoriel qui t'explique bien les regroupements :
    Groupage, ensembles et sous ensembles
    par Frédéric Brouard
    Le GROUP BY et opérations ensemblistes.
    Par ailleurs une petite recherche sur ce forum te permettrait de retrouver rapidement les solutions données à des problèmes équivalents.
    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 régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    Merci

    Mais même en utilisant le having ça ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `community` WHERE `community_name` = 'qc' HAVING id_program_years = MAX(id_program_years)
    L'idée est d'avoir la ligne qui possède le plus grand id_program_years. La requête ci dessus ne retourne rien! Et honnêtement je ne sais pas comment trouver le max d'une colonne dans une condition ..


    Merci!


    ...

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM `community` WHERE `community_name` = 'qc'
    HAVING `id_program_years` = (SELECT MAX(`id_program_years`) FROM `community` WHERE `community_name` = 'qc')

    ...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Si vous passez par une sous-requête un WHERE suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
      FROM `community`
     WHERE `id_program_years`= (SELECT MAX(`id_program_years`)
                                  FROM `community`
                                 WHERE `community_name` = 'qc')
    Notez qu'il n'est pas nécessaire de remettre le filtre sur le nom dans la requête principale puisqu'il est implicite avec la sous-requête.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    L'extrait SQL montre à quel point les sous-requêtes peuvent être pratiques lorsque l'on travaille dans une société informatique comme la nôtre. En transférant la recherche de l'ID maximum à la sous-requête, la requête principale reste mince et se concentre sur le filtrage de la valeur renvoyée. Le code est ainsi plus propre et plus facile à scanner que si l'on dupliquait la condition de nom. En tant que personne qui révise de nombreuses requêtes complexes dans une société informatique, j'apprécie les optimisations qui rendent la logique et le flux plus faciles à suivre en un coup d'œil. Les sous-requêtes ont certainement leur place. Bien qu'elles puissent avoir un impact sur les performances d'énormes bases de données, pour la plupart de nos cas d'utilisation, l'amélioration de la lisibilité en vaut la peine. Bel exemple de requête bien structurée.

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

Discussions similaires

  1. Comment faire pour utiliser plusieurs fonctions logiques dans une condition ?
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/11/2010, 11h37
  2. [MEX] [Débutant] Utiliser la fonction max dans les mex files
    Par brel380 dans le forum MATLAB
    Réponses: 1
    Dernier message: 19/07/2007, 16h08
  3. [SQL Server 8] fonction Max --- selon des conditions
    Par Baquardie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2006, 21h06
  4. utilisation de fonction membre dans une autre
    Par tcharles dans le forum C++
    Réponses: 4
    Dernier message: 14/12/2005, 17h19
  5. Fonction MAX dans une condition WHERE
    Par borgfabr dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 16h06

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