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 :

Utilisation de Distinct sur un seul champ!


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 30
    Points : 29
    Points
    29
    Par défaut Utilisation de Distinct sur un seul champ!
    Bonjour,

    Depuis quelques heures je bute sur un problème qui m'a l'air assez simple .

    Soit la table Employee :

    Nom ------- Prénom
    Dupont ---- Jean
    Dupont ---- Pierre
    Dupond --- Jean
    Dupont ---- Jean

    J'essaie de trouver la requête qui me permettrait de retourner les résultats suivants :

    Nom ------- Prénom
    Dupont ---- Jean
    Dupond --- Jean

    J'ai impérativement besoin des 2 champs :nom et prénom.

    Lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select disctinct nom from employee
    J'obtiens :
    Nom
    Dupont
    Dupond

    Mais lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select disctinct nom, prénom from employee
    J'obtiens :
    Nom ------- Prénom
    Dupont ---- Jean
    Dupont ---- Pierre
    Dupond --- Jean

    C'est comme si le distinct portait sur les champs nom ET prénom!

    D'avance merci pour votre aide!

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    en effet le distint porte sur l'ensemble de la ligne

    tu peux regarder du coté de 'group by'. Par contre, il faut savoir quel prénom tu choisis. quel est ton critere de choix?

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom, prenom from employee group by nom, prenom
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    Merci d'avor répondu si rapidement à ma question!!

    Malheureusement,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom, prenom FROM employee GROUP BY nom, prenom
    renvoi le même résultat que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT disctinct nom, prénom FROM employee
    à savoir :
    Nom ------- Prénom
    Dupont ---- Jean
    Dupont ---- Pierre
    Dupond --- Jean


    Cypher, je cherche à renvoyer le premier prénom rencontré pour chaque nom.

    Nom ------- Prénom
    Dupont ---- Jean
    Dupont ---- Pierre
    Dupond --- Jean
    Dupont ---- Hervé

    La requête devrait me renvoyer :
    Nom ------- Prénom
    Dupont ---- Jean
    Dupond --- Jean

    Je vais essayer de m'en sortir avec le group by
    ...

  5. #5
    En attente de confirmation mail
    Inscrit en
    Mai 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    il suffit je crois de ne faire un group by que sur le nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom, prenom FROM employee GROUP BY nom

  6. #6
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    Citation Envoyé par bmeurant Voir le message
    il suffit je crois de ne faire un group by que sur le nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom, prenom FROM employee GROUP BY nom
    ce type de requete va fonctionner sous MySQL mais pas sous d'autre SGBD
    Il faut souvent en efffet preciser quand il y a plusieurs possibilités quel élement choisir (ici le prenom)

    une solution possible si le choix n'est pas important :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom, min(prenom) from table group by nom

  7. #7
    En attente de confirmation mail
    Inscrit en
    Mai 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Effctivement il n'est pas dit que cela marche ailleurs que sous mySQL.

    Cependant, la solution que tu préconises revient à celle évoquée plus haut qui retourne l'ensemble des enregistrement, ce qui ne semble pas convenir aux attentes de Bils.

    Je te rejoins par contre sur le choix d'un critère pour selectionner le prénom : il suffit alorsde passer par une requête imbriquée (qui marche sur tout SGBD à priori) pour appliquer ce critère.

    Exemple : critère d'ordre alphabétique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT distinct nom, prenom FROM employee e1
    WHERE prenom = (SELECT MIN(prenom) FROM employee e2 WHERE e1.nom = e2.nom);
    Est-ce que cela correspond au besoin ?

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    oups en effet, je me suis trompé de requete

    mais pas besoin de requetes imbriquées, exemple dans mon post précédent

  9. #9
    En attente de confirmation mail
    Inscrit en
    Mai 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Effectivement ta requête est beaucoup mieux mais t'as triché tu l'as éditée après () ...

    Sréieusement c'est effectivement la meilleurs solution pour un choix de prénom par ordre alpabétique croissant.

    Je donnais à titre d'exemple la requête avec requête imbriquée dans le cas d'utilisations plus poussées, de critères plus complexes, etc.

    je pense qu'on est d'accord ..

  10. #10
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    j'ai pas triché, j'ai juste vu avec ta remarque que j'avais écrit n'importe quoi avant. donc j'ai juste remplacé la requete pour éviter toute confusion

    Mais à deux, on va finir par trouver la bonne solution

    bonne soirée

    Michel

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    Merci les gars!

    La requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT nom, min(prenom) FROM TABLE GROUP BY nom
    fonctionne à merveille et répond tout à fait à mes attentes!!

    Merci de m'avoir fait profiter de votre expérience!
    @+

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

Discussions similaires

  1. Distinct d'un seul champ sur un objet
    Par kohsaka dans le forum Linq
    Réponses: 2
    Dernier message: 31/05/2011, 08h13
  2. DISTINCT sur un seul champ
    Par justinedr71 dans le forum Développement
    Réponses: 6
    Dernier message: 06/07/2010, 13h27
  3. [9i, débutant] Clause DISTINCT sur un seul champ
    Par JYves dans le forum Oracle
    Réponses: 11
    Dernier message: 06/09/2006, 17h08
  4. Distinct sur un seul champ...
    Par Noodles dans le forum Langage SQL
    Réponses: 16
    Dernier message: 04/01/2005, 09h36
  5. [Débutant] DISTINCT sur une seule des colonnes ?
    Par Neilos dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/06/2004, 23h04

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