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 deux colonnes


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 18
    Points
    18
    Par défaut Utilisation de DISTINCT sur deux colonnes
    je cherche comment puis je utiliser distinct sur le résultat d'une requete qui contient deux colonne

    table contact


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    societe    |   nom_collab
    -----------+----------------
    microsoft  |   billou
    microsoft  |   billou
    microsoft  |   billou
    wanadoo    |   saddam



    SELECT DISTINCT societe FROM contact;

    ok, j'ai




    moi en plus de ca, j'aimerai recuperer le champ nom_collab de la ligne qu'il prend en distinct ...

    donc

    SELECT DISTINCT societe,nom_collab FROM contact;

    me donne :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    societe    |   nom_collab
    -----------+----------------
    microsoft  |   billou
    microsoft  |   billou
    microsoft  |   billou
    wanadoo    |   saddam


    et j'aimerais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    societe    |   nom_collab
    -----------+----------------
    microsoft  |   billou
    wanadoo    |   saddam

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    je m'excuse pour l'erreur , c'est corrigé


    Citation Envoyé par dehorter olivier Voir le message
    la question est :

    Comment est choisi "billou" ?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 64
    Points
    64
    Par défaut
    Je pense que tu cherche a faire ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select societe ,nom_collab
    FROM maTable
    group by societe , nom_collab
    avec ca , si jamais les collab sont différent pour une même societé tu aura plusieurs ligne sinon une seule par société.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT societe,nom_collab 
    FROM contact;
    Doit vous renvoyer le résultat attendu.

    Si ce n'est pas le cas, vous ne travaillez pas avec un SGBD relationnel !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    je travaille avec sql 2005

    et pour résultat souhaité


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    societe    |   nom_collab
    -----------+----------------
    microsoft  |   billou
    wanadoo    |   saddam
    si je met ]SELECT DISTINCT societe,nom_collab

    le résultat sera affiché avec le doublons dans ce cas

    Citation Envoyé par SQLpro Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT societe,nom_collab 
    FROM contact;
    Doit vous renvoyer le résultat attendu.

    Si ce n'est pas le cas, vous ne travaillez pas avec un SGBD relationnel !

    A +

  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
    Est-ce que vous exécutez cette requête telle quelle ? (pas d'ajout de colonnes, conditions, ...)

    Êtes-vous sur que vos noms sont exactement les mêmes (blancs avant/après..) ?
    ~ Lola ~

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hanamachi Voir le message
    Je pense que tu cherche a faire ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select societe ,nom_collab
    FROM maTable
    group by societe , nom_collab
    avec ca , si jamais les collab sont différent pour une même societé tu aura plusieurs ligne sinon une seule par société.
    GROUP BY et DISTINCT n'ont rien à voir. Ce sont deux fonctionnalités dont un des effet est similaire, mais on ne peut en aucun cas remplacer l'un par l'autre.
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Quelle est la requête exacte que tu lances ? N'y a-t-il pas d'autres colonnes sélectionnées ?
    On ne jouit bien que de ce qu’on partage.

  9. #9
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Je répond en public à un message privé de hanamachi.

    En effet, je pense que la différence ente GROUP BY et DISTINCT n'est pas toujours bien comprise, et autant que ma réponse profite à tous.

    Citation Envoyé par hanamachi
    Dommage que tu critique ma solution . c'est très certainement ce qu'il cherche à faire même si il a écris "distinct" dans son titre ...

    au moment ou j'ai posté il n'avais pas modifié sa deuxième colone et elle contenait des valeurs différentes pour une même societé.

    ma solution n'est surement pas la seule mais c'est uen solution qui résout son problème
    Non non, je persiste et signe, DISTINCT est bien ce qu'il cherche à faire, et non un GROUP BY.
    Le GROUP BY ne sert qu'à regrouper des tuples dans l'optique de leur appliquer une fonction de regroupement (count, sum, etc.)
    Ça n'a absolument rien à voir avec DISTINCT, qui va s'occuper de retourner une et une seule fois chaque tuple.
    Le fait que GROUP BY fasse un DISTINCT implicitement n'est qu'un effet de bord du GROUP BY.
    On ne jouit bien que de ce qu’on partage.

  10. #10
    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
    Le GROUP BY est effectué bien avant le SELECT, alors que le DISTINCT est effectué après.
    Prenons pour point de départ deux requêtes qui renvoient le même résultat :
    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
      SELECT id
        FROM ( SELECT 1 AS id FROM dual UNION ALL
               SELECT 1       FROM dual)
    GROUP BY id;
     
    ID
    --
     1
     
      SELECT DISTINCT 
             id
        FROM ( SELECT 1 AS id FROM dual UNION ALL
               SELECT 1       FROM dual);
     
    ID
    --
     1
    Ajoutons une fonction de fenêtrage :
    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
      SELECT id
           , row_number() over(ORDER BY id asc) AS rn
        FROM ( SELECT 1 AS id FROM dual UNION ALL
               SELECT 1       FROM dual)
    GROUP BY id;
     
    ID RN
    -- --
     1  1
     
      SELECT DISTINCT 
             id
           , row_number() over(ORDER BY id asc) AS rn
        FROM ( SELECT 1 AS id FROM dual UNION ALL
               SELECT 1       FROM dual);
     
    ID RN
    -- --
     1  1
     1  2
    Et patatrac, GROUP BY et DISTINCT ne réagissent pas de la même façon.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/02/2014, 20h16
  2. Petit souci avec DISTINCT sur deux colonnes
    Par Nuks1304 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/01/2013, 14h28
  3. Afficher des enregistrements sur deux colonnes
    Par Dauphind dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 14h16
  4. [Tableaux] Array sur deux colonnes et foreach..
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2006, 08h46
  5. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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