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 :

Petite question sur le DISTINCT


Sujet :

Langage SQL

  1. #1
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut Petite question sur le DISTINCT
    Bonjour à tous.
    Je voudrais savoir un peu comment fonctionne la clause DISTINCT.
    Quand il y a un doublon, elle garde le premier qui a été trouvé, c'est bien ça ?
    Exemple (avec une table CLIENT) :
    NumCli NomCli PrénomCli
    45 DUPONT Jean
    871 DUPONT Jean
    1 DUPONT Jean
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT * FROM CLIENT;
    Quel DUPONT sera affiché ?
    Si c'est bien le premier, est-il possible de faire en sorte que, quand il y a un doublon, seuls les clients dont le numéro est supérieur à 870 soient affichés ?

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,
    ici toutes les lignes seront affichees car tu fait un SELECT DISTINCT sur toutes les colonnes (*) et que les identifiants sont differents.

    Par contre avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT NomCli, PrenomCli
    FROM CLIENT
    Tu obtiendras :
    NomCli PrénomCli
    DUPONT Jean
    Desolee pour le clavier qwerty

  3. #3
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par azertix Voir le message
    Si c'est bien le premier, est-il possible de faire en sorte que, quand il y a un doublon, seuls les clients dont le numéro est supérieur à 870 soient affichés ?
    Cette ligne de code te permet de selectionner les clients dont le numero est superieur a 870 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM CLIENT WHERE NumCli > 870
    Desolee pour le clavier qwerty

  4. #4
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Bonjour,
    ici toutes les lignes seront affichees car tu fait un SELECT DISTINCT sur toutes les colonnes (*) et que les identifiants sont differents.

    Par contre avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT NomCli, PrenomCli
    FROM CLIENT
    Tu obtiendras :


    Desolee pour le clavier qwerty
    Dans ton exemple, il garde le premier qu'il trouve, donc ?
    Comment puis-je faire en sorte qu'en cas de doublon (seulement), seul le client ayant un numéro supérieur à 870 soit affiché ?

  5. #5
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    Citation Envoyé par azertix Voir le message
    Comment puis-je faire en sorte qu'en cas de doublon (seulement), seul le client ayant un numéro supérieur à 870 soit affiché ?
    et s'il y a plusieurs numéro supérieurs à 870, tu choisis lequel??


    tu peux prendre par exemple le max pour chaque nom/prenom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select max(numcli),nomcli,prenomcli
    from table
    group by nomcli,prenomcli

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    En fait il ne garde pas forcement le premier, il ne garde pas en memoire lequel il prend, il ne recupere que le nom et le prenom. En gros il "oublie" l'identifiant.

    Il faut donc que tu fasse un mix de mes deux reponses.

  7. #7
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par Cybher Voir le message
    et s'il y a plusieurs numéro supérieurs à 870, tu choisis lequel??


    tu peux prendre par exemple le max pour chaque nom/prenom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select max(numcli),nomcli,prenomcli
    from table
    group by nomcli,prenomcli
    Oui, un MAX m'irait bien. C'est effectivement le client ayant le numéro le plus grand, que je veux garder.
    Merci à toi
    Citation Envoyé par lola06 Voir le message
    En fait il ne garde pas forcement le premier, il ne garde pas en memoire lequel il prend, il ne recupere que le nom et le prenom. En gros il "oublie" l'identifiant.
    Ok, c'est noté !

    Merci à vous deux pour réponses, et à la prochaine sur le forum

  8. #8
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    En revanche, je crains qu'un MAX me retourne le client ayant le numCli le plus grand. Or je voudrais que tous les clients soient affiché, et qu'en cas de doublon des noms de client uniquement, seul le client ayant le numéro le plus grand soit affiché.

    Exemple :
    12 DUPONT Richard
    15 DUPONT Michel
    96 DURAND Albert
    25 DUPONT Richard
    65 MARTIN Jean
    41 GAILLARD Olivier
    56 GAILLARD Olivier
    Doit retourner :
    15 DUPONT Michel
    96 DURAND Albert
    25 DUPONT Richard
    65 MARTIN Jean
    56 GAILLARD Olivier

  9. #9
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    tu as essayé au moins la requete que je t'ai proposé?

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 400
    Points
    28 400
    Par défaut
    C'est à ça que sert le GROUP BY
    Cours sur les Regroupements en SQL

  11. #11
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par Cybher Voir le message
    tu as essayé au moins la requete que je t'ai proposé?
    Oui, je l'avais testé mais je pensais qu'elle ne fonctionnait pas parce qu'il y avait du texte qui trainait je ne sais pas pourquoi au milieu de ma liste de numéros de client et ça a donc faussé le tri
    Donc autant pour moi et bonne fin de journée

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

Discussions similaires

  1. [ATL] Petite question sur les progress bar
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2005, 09h40
  2. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  3. petite question sur le composant IBX ...
    Par vbcasimir dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/01/2005, 10h33
  4. Réponses: 3
    Dernier message: 08/12/2004, 13h58
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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