Home » Non-English Forums » French » aide pour un exercice
|
|
|
|
Re: aide pour un exercice [message #686161 is a reply to message #686158] |
Tue, 28 June 2022 09:00 |
|
lildouba
Messages: 4 Registered: June 2022
|
Junior Member |
|
|
Select I.Nom, I.Prenom, SUM(M.NbHeureTot) AS NombreHeureTotal
From Interimaire I
INNER JOIN Mission M ON I.intId = M.InterimaireId
INNER JOIN Temps T ON T.MissionId = M.MissionId
Where T.Site = 'MBORO'
GROUP BY I.Nom, I.Prenom
*******************************************************
2)select Interrimaire.prenom,mission.NnHeureTot
from Interrimaire,mission,poste,entreprise
where Interrimaire.IntId=mission.IntId
and poste.posteId=mission.posteId and entreprise.EntId=poste.EntId;
******************************************************
Select T.codeAnanlytique, To_char(T.dateHeure, 'YYYY/MM') AS Annee_Mois, SUM(T.NbHeureNorm) As NombreHeureTotal
From Temps T
GROUP BY T.codeAnanlytique, To_char(T.dateHeure, 'YYYY/MM')
******************************************************
3)select temps.codeAnalitique, count(Interrimaire.nom)
from Interrimaire,temps,mission
where interrimaire.IntId=mission.IntId and
mission.missionId=temps.missionId group by temps.codeAnalitique
having count(Interrimaire.nom)>10;
4)select profil.NiveauScolair, AVG(Interrimaire.age)
from Interrimaire,poste,profil
where profil.profilId=poste.profilId
and profil.profilId=Interrimaire.profilId and poste.typePoste='stagaire'
group by profil.NiveauScolair;
|
|
|
Re: aide pour un exercice [message #686162 is a reply to message #686161] |
Tue, 28 June 2022 09:01 |
|
lildouba
Messages: 4 Registered: June 2022
|
Junior Member |
|
|
5)select Interrimaire.age,Interrimaire.nom
from Interrimaire,profil,poste
where profil.profilId=poste.profilId
and profil.profilId=Interrimaire.profilId group by Interrimaire.age,Interrimaire.nom
having Interrimaire.age=max(Interrimaire.age);
6) select p.niveauscolaire, E.libelle, sum (po.mtFacture-po.mtpayer) from entreprise E, poste PO, profil P
where E.entrepriseid= Po.entrepiseid
and P.profilid=PO.profilid
group by p.niveauscolaire, E.libelle
having sum( po.mtfacture-po.mtpaye)>10000000;
|
|
|
Re: aide pour un exercice [message #686172 is a reply to message #686162] |
Wed, 29 June 2022 03:51 |
|
Michel Cadot
Messages: 68732 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
Une remarque générale : je sais qu'il est difficile d'écrire correctement des requêtes sans accès à une base de données, il faut donc faire doublement attention à ce qu'on écrit. Par exemple, sans vouloir aucunement vexer, "mission.IntId" n'existe pas il s'agit de "mission.InterimaireId", "interimaire" n'a qu'un seul "r", "codeAnalitique" est "codeAnalytique"...
Une autre remarque : pour faciliter la mise au point et la maintenance du code, il est bon de choisir un "standard" pour l'écriture des requêtes, par exemple (qui ne sont que des exemples), "mettre les mot-clés SQL et les fonctions standard en majuscules et le reste en minuscules" ou faire l'inverse. Une bonne idée est de s'aider d'un site de formattage de requêtes tel que SQL Formatter.
Ensuite, pour poster une requête sur le site, il faut utliser des "tags" comme expliqué à la page How to use [code] tags and make your code easier to read, voir les exemples ci-dessous avec vos requêtes en utilisant le formatteur ci-dessus.
1) Correct.
SELECT i.nom,
i.prenom,
SUM(m.nbheuretot) AS NombreHeureTotal
FROM interimaire i
inner join mission m
ON i.intid = m.interimaireid
inner join temps t
ON t.missionid = m.missionid
WHERE t.site = 'MBORO'
GROUP BY i.nom,
i.prenom
2) La deuxième requête est la bonne.
SELECT t.codeananlytique,
TO_CHAR(t.dateheure, 'YYYY/MM') AS Annee_Mois,
SUM(t.nbheurenorm) AS NombreHeureTotal
FROM temps t
GROUP BY t.codeananlytique,
TO_CHAR(t.dateheure, 'YYYY/MM')
3) Comme il peut y avoir plusieurs intérimaires de même nom, il faut compter les "IntId" et non leur "Nom".
De plus, un intérimaire pouvant faire plusieurs missions (plusieurs enregistrements dans Mission pour le même Int[erimaire]Id) ou plusieurs fois la même mission (plusieurs enregistrements dans Temps pour le même MissionId), il faut compter le nombre de valeurs distinctes de "IntId".
SELECT temps.codeanalitique,
COUNT(DISTINCT interrimaire.intid)
FROM interrimaire,
temps,
mission
WHERE interrimaire.intid = mission.interimaireid
AND mission.missionid = temps.missionid
GROUP BY temps.codeanalitique
HAVING COUNT(DISTINCT interrimaire.intid) > 10
4) Correct.
Attention ! La donnée "STAGIAIRE" est en majuscules, la mettre autrement ne retournerait aucun enregistrement.
SELECT profil.niveauscolaire,
AVG(interrimaire.age)
FROM interrimaire,
poste,
profil
WHERE profil.profilid = poste.profilid
AND profil.profilid = interrimaire.profilid
AND poste.typeposte = 'STAGIAIRE'
GROUP BY profil.niveauscolaire
5) La requête n'est pas correcte.
Comme la requête faut un "group by Interrimaire.age,Interrimaire.nom", tous les enregistrements retournés satisfont la condition "Interrimaire.age=max(Interrimaire.age)" et donc la requête retourne tous les enresgitrements générés par le "GROUP BY".
Il faut ici utiliser une sous-requête et la clause de "factoring" WITH d'Oracle pour éviter la répétition de la sous-requête.
Note : la jointure avec la table "Profil" n'est pas utile, les tables "Interimaire" et "Poste" suffisent.
Note : il faut savoir si la formulation "trouvé un emploi" veut dire "trouvé un poste", sinon il faut restreindre aux enregistrements ayant "TypePoste" égaux à "CDI" ou "CDD".
6) Correct.
SELECT p.niveauscolaire,
e.libelle,
SUM(po.mtfacture - po.mtpayer)
FROM entreprise e,
poste po,
profil p
WHERE e.entrepriseid = po.entrepiseid
AND p.profilid = po.profilid
GROUP BY p.niveauscolaire,
e.libelle
HAVING SUM(po.mtfacture - po.mtpaye) > 10000000
|
|
|
|
Goto Forum:
Current Time: Thu Jan 30 02:32:28 CST 2025
|