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 :

group by sous condition


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut group by sous condition
    Bonjour,

    J'aimerais réaliser une requête de type select dans une base postgres avec un group by selon une condition.
    Exemple:
    table1:
    id champ1 champ2
    1 toto 1
    2 toto 0
    3 tata 1
    4 tata 1

    L'objectif est de récupérer les différents intitulés des 'champ1' tel que tous les 'champ2' de chaque 'champ1' soit égaux à 1 (donc s'il y a un champ1 qui a un champ2 = 0 on ne le prend pas)
    Dans mon exemple on doit récupérer uniquement la ligne 4 ('tata').

    Avez-vous une idée sur la manière de faire?
    Un truc de ce genre : select * from table1 group by champ2 where champ2 = '1'
    Mais je ne sais pas si on peut faire un where dans un group by...

    Merci.

  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 : 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
    pourquoi la ligne 4? et pas la 3? on prend le plus grand?

    sinon ne peux tu pas procéder autrement?
    -> il est facile de sélectionner les champ1 qui ont un champ2 différent de 1
    -> tu prends les champ1 qui se sont pas dans ceux relevé ci dessus

    Edit : exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select champ1 from table 
    where champ1 not in 
    (select champ1 from table where champ2 <> 1) 
    group by champ1;

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  *
    FROM    matable AS t1
    WHERE   NOT EXISTS
            (   SELECT  1
                FROM    matable AS t2
                WHERE   t1.champ1   = t2.champ1
                    AND t1.champ2   <> t2.champ2
            )
    ;
    Après tu peux peaufiner tes résultats si nécessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  MAX(id)
        ,   champ1
    FROM    matable AS t1
    WHERE   NOT EXISTS
            (   SELECT  1
                FROM    matable AS t2
                WHERE   t1.champ1   = t2.champ1
                    AND t1.champ2   <> t2.champ2
            )
    GROUP BY champ1
    ;

  4. #4
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    En fait, peu m'importe l'ordre. On pourrait effectivement prendre la ligne 3.
    En fait pour chaque valeur de 'champ1' il y a un nombre variable de lignes. Pour chaque ligne, au départ de la base de données, la valeur de 'champ2' est égale = 0. Puis au fur et à mesure des mise à jours par les utilisateurs, les valeurs de 'champ2' sont changées de 0 à 1.
    Ce que je cherche c'est donc à récupérer toutes les valeurs de 'champ1' pour lesquelles toute et absolument toutes les valeurs de 'champ2' associées sont égale à 1

    tata 1
    tata 1
    tata 1
    tata 1
    toto 1
    toto 0
    tata 1
    toto 1

    => je veux donc récupérer 'tata' puisqu'il y a toujours un '1' associé mais je ne veux pas récupérer toto car il existe une occurence de toto associé à '0'.

  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
    teste les requetes proposées,
    cela devrait convenir

  6. #6
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Effectivement la 1ère solution proposée était la bonne.

    Merci

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

Discussions similaires

  1. inserer un groupe sous condition
    Par mikedavem dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 17/01/2008, 09h03
  2. Réponses: 8
    Dernier message: 14/01/2006, 15h17
  3. Créer des utilisateurs et des groupes(droits) sous SqlServer
    Par shako95 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/11/2005, 07h57
  4. Pb Ouverture de formulaire sous condition.
    Par Phl98 dans le forum Access
    Réponses: 8
    Dernier message: 03/11/2005, 22h28
  5. Create function sous condition
    Par nbl dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/05/2005, 12h00

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