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 :

select count> select count


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 69
    Par défaut select count> select count
    Bonjour.

    Je me tourne vers vous car je n'arrive pas à faire ma requete pour obtenir ce que je veux

    J'ai une table SuiviCollaborateurs avec 4 champs:IdCollaborateur (non unique),Theme,Commentaire et Datesaisie


    dans les themes, j'ai entre autre 'Caution' et 'Retour caution'

    Sachant que pour un meme id, je peux avoir plusieurs 'Caution' et 'Retour caution' comme Theme, je cherche à remonter les id qui ont plus de 'Caution' que de 'Retour caution'.
    Et oui, l'id me servira pour récuperer des infos dans une table, mais j'espére me débrouiller pour modifier la requete quand elle me repontera les id .

    la requete de verification est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select IdCollaborateur,Theme,COUNT(IdCollaborateur) as nombre from SuiviCollaborateurs
    where (Theme='Caution' or Theme='Retour caution')
    group by IdCollaborateur,Theme
    order by IdCollaborateur,Theme
    elle donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    61	Caution	5
    61	Retour caution	2
    75	Caution	1
    75	Retour caution	1
    117	Caution	3
    117	Retour caution	2
    422	Caution	3
    422	Retour caution	1
    423	Caution	2
    Ma requete qui ne me donne pas satisfaction est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select  IdCollaborateur
    from SuiviCollaborateurs
    where Theme='Caution'and
    (select count(IdCollaborateur) from SuiviCollaborateurs where Theme='Caution')>
    (select count (IdCollaborateur) from SuiviCollaborateurs where Theme='Retour caution')
    group by IdCollaborateur
    order by IdCollaborateur
    et le resultat:
    on devrait avoir que 61-117-422-423

    Je sais bien que c'est parce que dans la clause where, la requete balaie tous les id et ne prends pas en compte que celui du select en cours mais je n'arrive pas voire comment faire.

    Merci de vos suggestion.

  2. #2
    Membre chevronné Avatar de icsor
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2008
    Messages : 258
    Par défaut
    Bonjour,

    pour résoudre votre problème, vous pouvez mettre des alias pour nommer vos tables, puis rajouter dans les clauses where des select vous servant pour le dénombrement que les id doivent être les même que pour la table principale.

    (comme je ne me trouve pas clair, je vous donne une idée du code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select *
    from tableA a
    where (select count(1) from tableB b where b.id = a.id) < (select count(1) from tableC c where c.id = a.id)

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez le faire ainsi, avec un pivot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      SELECT IdCollaborateur
        FROM SuiviCollaborateurs
       WHERE Theme IN ('Caution', 'Retour caution')
    GROUP BY IdCollaborateur
      HAVING count(case Theme when 'Caution'        then 1 end)
           > count(case Theme when 'Retour caution' then 1 end)
    ORDER BY IdCollaborateur ASC

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 69
    Par défaut
    Merci à vous.

    LA requete de Waldar marche impecable.

    J'essaie d'adapter celle de icsor (c'est celle qui se raproche le plus de ce que je connais ) afin de bien comprendre pour la prochaine fois.

    edit: La 2' requete marche aussi ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT distinct IdCollaborateur
    FROM SuiviCollaborateurs a
    WHERE (SELECT count(1) FROM SuiviCollaborateurs b WHERE b.IdCollaborateur = a.IdCollaborateur and Theme='retour caution') 
    < (SELECT count(1) FROM SuiviCollaborateurs c WHERE c.IdCollaborateur = a.IdCollaborateur and Theme='Caution')
    Bonne journée .

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

Discussions similaires

  1. [SQL Server] select max d'un count ?
    Par chess75 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 28/08/2017, 14h38
  2. [MySQL] Requête Count dans Select
    Par Phrederik dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 06/11/2011, 22h26
  3. Select MAX d'un count
    Par pckage dans le forum SQL
    Réponses: 6
    Dernier message: 22/12/2009, 19h44
  4. Requête sql UPDATE comportant 1 SELECT + 1 AVG + 1 COUNT
    Par tomazawak dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/10/2009, 16h38
  5. select * ou select count(*) ou select count(id)
    Par wjc dans le forum Requêtes
    Réponses: 12
    Dernier message: 19/12/2005, 19h00

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