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 :

Recherche requête qui affiche la ligne ayant la plus petite valeur (en nombre de caractères) d'un champ


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut Recherche requête qui affiche la ligne ayant la plus petite valeur (en nombre de caractères) d'un champ
    Bonjour,

    j'ai une table fille comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id_fille | prenom | signe| age
    ---------------------------------
    1 | ava | bélier | 23
    2 | bella | cancer | 22
    3 | célia | capricorne | 25
    4 | estella | gémeau | 24
    5 | gaga | sagittaire | 29
    Je cherche la requête permettant d'afficher toutes les valeurs des champs de la ligne ayant le prénom le plus long, càd que le résultat doit être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    4 | estella | gémeau | 10
    car estella est le prénom le plus long.

    Je sais que je dois utiliser char_length(prenom), mais je ne vois pas comment l'imbriquer dans la requête

    Pour l'instant ma requête est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select *, char_length(prenom) as prenom_length from fille 
    where prenom_length=(select min(char_length(prenom) from fille))
    Une idée ?

    Merci d'avance, cordialement

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 818
    Points : 11 631
    Points
    11 631
    Par défaut
    Bonjour,
    Quelle base de données ?

    Sinon, un essai:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT f1.*, char_length(f1.prenom) AS prenom_length
    FROM fille as f1
    left outer join fille as f2 on char_length(f2.prenom) < char_length(f1.prenom)
    where f2.id is null

  3. #3
    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 070
    Points
    13 070
    Par défaut
    Bonjour,

    Au moment où votre filtre est appliqué, les colonnes du SELECT ne sont pas encore évaluées, et donc prenom_length n'existe pas...
    Il faut donc reprendre sa définition dans le filtre.

    (par ailleurs, il me semble que c'est plutôt un MAX qu'il vous faut...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *, char_length(prenom) AS prenom_length FROM fille 
    WHERE char_length(prenom)=(SELECT MAX(char_length(prenom) FROM fille))

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 818
    Points : 11 631
    Points
    11 631
    Par défaut
    En fait il y a dichotomie entre le titre (la plus petite valeur en nombre de caractères), le message (le prénom le plus long) et la requête (min(char_length...)).

    Alors, on prend le plus court ou le plus long ?

    tatayo.

  5. #5
    Membre régulier
    Inscrit en
    février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut
    Merci à tous les deux pour vos réponses.

    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Au moment où votre filtre est appliqué, les colonnes du SELECT ne sont pas encore évaluées, et donc prenom_length n'existe pas...
    Il faut donc reprendre sa définition dans le filtre.

    (par ailleurs, il me semble que c'est plutôt un MAX qu'il vous faut...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *, char_length(prenom) AS prenom_length FROM fille 
    WHERE char_length(prenom)=(SELECT MAX(char_length(prenom) FROM fille))
    => dans ce cas le AS prenom_length est inultile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *, char_length(prenom) FROM fille 
    WHERE char_length(prenom)=(SELECT MAX(char_length(prenom) FROM fille))
    Maintenant, imaginons, que je rajoute une ligne dans la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    6 | gaga2 | sagittaire | 29
    Et maintenant, je souhaite avoir la ligne ayant le prénom le plus long et dont l'age est de 29, donc le résultat doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    6 | gaga2 | sagittaire | 29
    Cependant ma requête est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *, char_length(prenom) FROM fille 
    WHERE char_length(prenom)=(SELECT MAX(char_length(prenom) FROM fille) where age='29')
    Là je galère encore. Une idée ?

    Merci d'avance.

  6. #6
    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 070
    Points
    13 070
    Par défaut
    Votre requête remonte les prénoms dont la taille est égale au plus grand prénom de celles qui ont 29 ans.

    Si j'ai bien compris, vous voulez les prénoms de celle ayant 29 ans et dont le prénom est de la taille de celle qui a 29 ans et qui à le plus long prénom. il faut donc deux fois la condition sur l'age :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *, char_length(prenom) FROM fille 
    WHERE char_length(prenom)=(SELECT MAX(char_length(prenom) FROM fille) WHERE age='29')
    AND age = '29'
    Soit dit en passant, la colonne age devrait être de type numérique, donc ôtez les quotes !

  7. #7
    Membre régulier
    Inscrit en
    février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut
    Merci beaucoup, ça marche maintenant.

    Bonne journée

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

Discussions similaires

  1. [2008] Requête qui duplique des lignes en fonction d'une valeur dans un champ
    Par Fredo67 dans le forum Développement
    Réponses: 6
    Dernier message: 27/01/2015, 12h03
  2. Requête qui affiche une ligne de résultat en moins
    Par keusty78 dans le forum Langage
    Réponses: 4
    Dernier message: 19/05/2014, 17h56
  3. [AC-2010] Problème requête qui affiche toujours les lignes supprimées d'une tables
    Par Bou31 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/07/2013, 17h15
  4. une requête qui selectionne la ligne max
    Par kuhnden dans le forum Access
    Réponses: 3
    Dernier message: 01/11/2005, 18h39
  5. Réponses: 4
    Dernier message: 17/10/2005, 15h05

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