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 :

Requête pour compter le nombre d'interventions


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut Requête pour compter le nombre d'interventions
    bonjour,

    J'ai une petite requête SQL a réaliser qui permet de connaitre le nombre d'interventions effectuées par chaque service .

    moi j'ai fait ceci qu'en pensez-vous???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*)
    FROM 'intervenir'
    WHERE 'id_personne' IN (SELECT * FROM 'Employés' GROUP by 'num_service')

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Je suppose que id_personne est une clé étrangère pointant sur l'id de la table Employés ?
    Je suppose donc qu'une intervention ne peut être faite par une autre personne qu'un employé.
    Donc la requête revient à cela :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT count(id_personne)
    FROM intervenir
      LEFT JOIN `Employés` ON (`Employés`.id = intervenir.id_personne)
    GROUP BY `Employés`.num_service

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 849
    Points : 52 975
    Points
    52 975
    Billets dans le blog
    6
    Par défaut
    Que d'horreur dans cette requête !!!

    1) les noms des tables et des colonnes ne sont pas des chaines de caractères et n'ont donc pas besoin d'apostrophe
    2) faire un "WHERE 'id_personne' IN (SELECT * ..." c'est faire correspondre une colonne (id_personne) à plusieurs ( * ) !
    3) ne connaissez vous pas les jointures ?

    Bref, il serait temps d'apprendre le SQL. C'est pas un truc qu'on fait au hasard. C'est un langage de programmation évolué !!!

    Mon livre comme mon site web peuvent vous y aider ...

    A +

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Tu ne nous donnes pas la structure de tes tables et leur contenu, ce qui ne nous facilite pas la tâche pour t'aider.
    On ne sais pas s'il faut compter les interventions faites par les employés d'un service donné, ni si ce sont les interventions faites dans un service donné.
    C'est à dire si l'employé travaille tout le temps pour le service en question ou s'il est intervenu une ou plusieurs fois dans ce service.

    Sans la réponse à cette question et la structure de tes tables, on ne pourra pas t'aider, sauf te suggérer la lecture de tutoriel comme celui de SQLPRO.
    http://sqlpro.developpez.com/cours/sqlaz/ensembles/

    Cordialement
    Soazig

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut .
    Citation Envoyé par soazig Voir le message
    Bonjour,
    Tu ne nous donnes pas la structure de tes tables et leur contenu, ce qui ne nous facilite pas la tâche pour t'aider.
    http://sqlpro.developpez.com/cours/sqlaz/ensembles/

    Cordialement
    Soazig
    voici le schéma de mes tables , ma requête SQL doit permetre de connaitre le nombre d'interventions effectuées par chaque service.
    Images attachées Images attachées  

  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
    Dans un premier temps tu n'as pas assez d'informations dans ton SELECT, en effet si tu veux le nombre d'intervention pour chaque service alors on s'attend à avoir un résultat du type : NumService | NBIntervention

    En adaptant la requête de transgohan on trouve ce que tu cherches.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT NumService, count(*) NBIntervention
    FROM intervenir i
       JOIN employe e
    ON i.id_personne = e.id_personne
    GROUP BY NumService
    P.S : Pense à indiquer ton SGBD car il existe des différences entre différentes versions...

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Avez-vous testez la requête que vous avez proposé ?

    Là au vu de votre mpd, il faut partir de la table service pour remonter, vi a des jointures internes, jusqu'aux interventions.

    Ensuite il faudra effectivement utiliser un group by sur l'id_service et compter les valeurs distincts d'interventions.

    Revenez avec une requête un peu plus réfléchie ?

    P.S.: lola06 vous faites abstraction du faites que plusieurs employés peuvent travailler sur une même intervention. ça lui fera un peu de travaille :p

  8. #8
    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 punkoff Voir le message
    P.S.: lola06 vous faites abstraction du faites que plusieurs employés peuvent travailler sur une même intervention. ça lui fera un peu de travaille :p
    Oui mais chaque couple employé/intervention sera comptabilisé. Je ne vois pas en quoi cette solution n'est pas bonne ?

    Prenons un exemple :

    Table Employé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IdEmploye | NumService
    1         | 1
    2         | 1 
    3         | 2
    4         | 3
    5         | 3
    Table intervenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IdEmploye | Idi
    1         | 1
    2         | 1 
    3         | 1
    4         | 2
    5         | 3
    Donc en résultat on aura :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NumService | NBIntervention
    1          | 2 
    2          | 1 
    3          | 2
    C'est peut-être l'effet du vendredi aprem avant les fêtes mais en quoi ma requête est mauvaise ?

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    En fait tout va dépendre de l'interprétation que l'on en fait.


    Là vous comptez le nombre d'intervenant sur une intervention par service et non le nombre d'intervention par service.

    Après ça peu ou non répondre à son besoin

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut confus
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    En fait tout va dépendre de l'interprétation que l'on en fait.

    Après ça peut ou non répondre à son besoin
    je ne comprends pas vraiment en quoi la requête proposés par lola06 n'est pas correcte, je ne suis pas très doué dans le domaine. Pouvez-vous me dire où est l’erreur svp et me proposer une requête correcte pour que je comprenne plus facilement. Ce n'est qu'un entrainement.

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Sa requête n'est pas fausse.

    Faites une requête qui compte le nombre d'intervention distinct par service et vous comprendrez la différence.

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Je ne vois pas de colonne intevernir dans votre MCD au niveau de la table intervention.

    Je voyais plus une requête comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select count(distinct a.num_i), c.numService
    from intervention a
    inner join intervenir b on a.num_i = b.num_i
    inner join employe c on b.id_personne = c.id_personne
    group by c.numService
    Si vous reprennez le jeux d'essai de lola06 vous aurez un résultat différent qui sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    NumService | NBIntervention
    1          | 1
    2          | 1 
    3          | 2
    A vous de voir si vous voulez comptez le nombre d'intervenant par intervention selon les services, ou le nombre d'intervention par service.

    edit : je viens de m'apercevoir qu'il y a une jointure en trop, la table intervention est inutile dans la requête

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut ...
    Citation Envoyé par punkoff Voir le message
    bonjour,

    Je ne vois pas de colonne intevernir dans votre MCD au niveau de la table in

    A vous de voir si vous voulez comptez le nombre d'intervenant par intervention selon les services, ou le nombre d'intervention par service.

    edit : je viens de m'apercevoir qu'il y a une jointure en trop, la table intervention est inutile dans la requête
    j'y étais encore loin...
    Moi je cherche plus à compter le nombre d'interventions par service.

    Pouvez vous m'expliquer svp à quoi servent au juste dans la requête les lettres (a,b et c ) ???

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Biensur,

    Ce sont des alias, ils permettent de renommer une table, colonne, sous-requete dans votre requete.

    Pour plus d'information http://sqlpro.developpez.com/

    Et lisez les cours dans la partie "Initiation à SQL" (à gauche dans le blog) car sérieux vu vos questions vous n'avez jamais prit le temps de vous intéresser au sujet

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut ...
    Je suis encore un grand novice j'ai soif de savoir de je cherche à m'améliorer ,je sais très bien que je n'ai pas le niveau ,mais bientôt ça viendra

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/06/2014, 09h45
  2. Réponses: 2
    Dernier message: 04/09/2012, 10h19
  3. Requête pour compter le nombre de lignes d'une procédure stockée?
    Par toutounesan dans le forum Développement
    Réponses: 13
    Dernier message: 06/06/2012, 12h59
  4. [AC-2000] Création d'une requête pour compter le nombre de ok dans une ligne
    Par yassine06 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2010, 16h10
  5. fonction pour compter le nombre de checkbox coché ?
    Par Death83 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/09/2005, 11h28

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