Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 16h25   #1
 
Homme boss J-M
Étudiant
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme boss J-M
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : -1
Points : -1
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 :
1
2
3
SELECT COUNT(*)
FROM 'intervenir'
WHERE 'id_personne' IN (SELECT * FROM 'Employés' GROUP BY 'num_service')
gwadajm est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 13/12/2011, 18h00   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 812
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 812
Points : 1 533
Points : 1 533
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 :
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
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 23h24   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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 +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2011, 14h23   #4
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 554
Points : 554
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 13h18   #5
 
Homme boss J-M
Étudiant
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme boss J-M
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : -1
Points : -1
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
Type de fichier : png relationnel 2.png (29,7 Ko, 6 affichages)
gwadajm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 14h22   #6
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
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 :
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...
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 14h23   #7
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 14h38   #8
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
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 :
1
2
3
4
5
6
IdEmploye | NumService
1         | 1
2         | 1 
3         | 2
4         | 3
5         | 3
Table intervenir
Code :
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 :
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 ?
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 14h49   #9
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 01h29   #10
 
Homme boss J-M
Étudiant
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme boss J-M
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : -1
Points : -1
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.
gwadajm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 07h54   #11
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 19h16   #12
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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 :
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 :
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 19h32   #13
 
Homme boss J-M
Étudiant
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme boss J-M
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : -1
Points : -1
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 ) ???
gwadajm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 19h37   #14
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 19h57   #15
 
Homme boss J-M
Étudiant
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme boss J-M
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : -1
Points : -1
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
gwadajm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h48.


 
 
 
 
Partenaires

Hébergement Web