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 :

DISTINCT sur certaines colonnes


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut DISTINCT sur certaines colonnes
    Bonjour,

    Comment faire un DISTINCT en SQL sur un sous-ensemble de colonne ?



    Par exemple, dans le résultat de ma requête, j'ai ce type de résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    +-----------+-----------+-----------+-----------+       --------------+-------------+-----------+
    | colonne_1 | colonne_2 | colonne_3 | colonne_4 |         colonne_n-2 | colonne_n-1 | colonne_n |
    +-----------+-----------+-----------+-----------+       --------------+-------------+-----------+
    |   XXXXX   |   ZZZZZ   |   WWWWW   |     1     |  ...         a      |      b      |     c     |
    |   XXXXX   |   ZZZZZ   |   WWWWW   |     2     |              d      |      e      |     f     |
    j'obtiens deux lignes où les 3 premières colonnes sont identiques et la 4ème contient la valeur 1 pour la première ligne et 2 pour la deuxième ligne.

    je souhaite ne garder que la ligne avec la valeur 1.

    Est-ce possible ?

    Cld.

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    ce que tu veux faire n'est pas un distinct mais un group by
    et donc il te faut une regle de groupement, à savoir est ce que tu garde le max ou le min par exemple...

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    on ne peut pas faire un group by sur 3 colonnes uniquement ?

    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
    SELECT
        colonne_1,
        colonne_2,
        colonne_3,
        MIN(colonne_4),
        ...
        colonne_n
     
    FROM
        table
     
    GROUP BY
       colonne_1,
       colonne_2,
       colonne_3

  4. #4
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Si vous voulez grouper sur vos trois colonnes, il vous fait etablir une regle min max pour chacune de vos colonnes.

    Apres, vous pourrez effectivement ne groupe que par les trois premières ... mais vous risquez d'avoir des éléments d'une ligne ou de l'autre selon la regle que vous employez...

    Vous utilisez quoi comme SGBD ?

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Je vais voir, merci.

    Autre question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    +----+----+
    | C1 | C2 |
    +----+----+
    | B  | 20 |
    | B  | 25 |
    | B  | 26 |
    | A  | 25 |
    | A  | 26 |
    | A  | 27 |
    | A  | 25 |
    je souhaite mettre une condition que lorsque C1 vaut A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT C1, C2
    FROM T
    WHERE
        CASE C1
            WHEN 'A' THEN C2 = 25
        END
    résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    +----+----+
    | C1 | C2 |
    +----+----+
    | B  | 20 |
    | B  | 25 |
    | B  | 26 |
    | A  | 25 |
    | A  | 25 |
    comment faire ?

  6. #6
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT C1, CASE C1
            WHEN 'A' THEN 25
            else C2 
        END
    FROM T

    Mais là, faudrait revoir un peu le cours de SQL, le where, c'est pour appliquer un filtre sur les lignes, par pour modifier les colonnes...

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Citation Envoyé par bstevy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT C1, CASE C1
            WHEN 'A' THEN 25
            else C2 
        END
    FROM T
    Mais là, faudrait revoir un peu le cours de SQL, le where, c'est pour appliquer un filtre sur les lignes, par pour modifier les colonnes...
    Je veux un filtre sur les lignes justement (mais pas sur toutes les lignes ce filtre, uniquement lorsque 'C1' vaut 'A').


    Si je met : WHERE C2 = '25' il va me supprimer les lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    | B  | 20 |
    | B  | 26 |

  8. #8
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Ha, tu veux dire ne garder que les lignes ou

    C1=A et C2=25
    ou C1 <> A

    voila, c'est fait ^^
    mais bon, là on n'est plus vraiment dans le sql, c'est une question de logique et d'expression du besoin...

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Oui effectivement ^^
    Sur l'exemple c'est assez simple.

    En réalité ma requête et beaucoup plus compliquée. Est-il possible de poser un filtre que sur un ensemble de lignes qui respectent une condition ?

  10. #10
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Le mieux dans ce cas sera d'extraire deux fois les données et de les regrouper avec un UNION
    Vous aurez une premiere requete avec des conditions d'extractions qui vous créer l'ensemble qui n'a pas besoin d'etre filtre (soit dit en passant, c'est déjà un filtre)
    union all
    une deuxieme requete dans laquelle vous avez les conditions d'extraction qui font que vous voulez appliquer un filtre + le filtre en lui meme.

    ca vous parle ?

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Bon ça devient trop compliqué ^^, je pensais que l'on pouvait le faire simplement.
    Je vais extraire toutes les données et les filtrer en java.

    Merci bien :p

Discussions similaires

  1. Boucle FOR sur certaines colonnes
    Par coralie59 dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/02/2009, 12h54
  2. Tri effectif que sur certaines colonnes
    Par benoitbs dans le forum Excel
    Réponses: 4
    Dernier message: 22/02/2008, 16h36
  3. Réponses: 8
    Dernier message: 19/11/2007, 19h47
  4. Réponses: 7
    Dernier message: 17/07/2007, 16h29
  5. Réponses: 2
    Dernier message: 07/10/2006, 20h46

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