Home » Non-English Forums » French » aide pour un exercice
aide pour un exercice [message #686157] Mon, 27 June 2022 13:34 Go to next message
lildouba
Messages: 4
Registered: June 2022
Junior Member
pouvez-vous m'aider à écrire ces requetes sql
  • Attachment: Doc1.pdf
    (Size: 58.72KB, Downloaded 1898 times)
Re: aide pour un exercice [message #686158 is a reply to message #686157] Mon, 27 June 2022 13:44 Go to previous messageGo to next message
Michel Cadot
Messages: 68625
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

Nous pouvons aider mais nous ne faisons pas les devoirs.
Qu'est-ce que vous avez déjà fait ? Où êtes-vous bloqué ? Pouorquoi ce blocage ?

Re: aide pour un exercice [message #686159 is a reply to message #686158] Mon, 27 June 2022 13:48 Go to previous messageGo to next message
lildouba
Messages: 4
Registered: June 2022
Junior Member
j'arrive pas a faire la requête 5 et 6.
ce n'est pas un devoir plutôt un exercice
Re: aide pour un exercice [message #686160 is a reply to message #686159] Tue, 28 June 2022 01:28 Go to previous messageGo to next message
Michel Cadot
Messages: 68625
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

Question 5 :
C'est un intérimaire => table Interimaire
Il a trouvé un emploi => l'enregistrement correspondant dans la table Poste à un poste de type CDD ou CDI
(donc joindre les 2 tables)
C'est le plus âgé => son age est égal au MAX des Age des précédents.

Question 6 :
En supposant que le bénéfice est MtFacture-MtPaye, cette information se trouve dans la table Poste
Le niveau scolaire se trouve dans la table Profil
Il faut restreindre le résultat à l'entreprise Golob dont on trouvera l'id dans la table Entreprise
Il faut donc joindre ces 3 tables, sommer les bénéfices en regroupant pas niveau scolaire et en ne gardant que les lignes résultats pour lesquelles la somme est supérieure à 10000000 (clause HAVING).

Postez vos réponses aux autres questions, peut-être y a-t-il des choses à commenter.

Re: aide pour un exercice [message #686161 is a reply to message #686158] Tue, 28 June 2022 09:00 Go to previous messageGo to next message
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 Go to previous messageGo to next message
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 Go to previous messageGo to next message
Michel Cadot
Messages: 68625
Registered: March 2007
Location: Nanterre, France, http://...
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 
Re: aide pour un exercice [message #686220 is a reply to message #686162] Mon, 04 July 2022 00:30 Go to previous message
Michel Cadot
Messages: 68625
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

Un retour ?

Previous Topic: Convertir Données en Hexadecimal en Oracle (merged 2)
Goto Forum:
  


Current Time: Fri Mar 29 03:15:34 CDT 2024