une requete assez compliquée

une requete assez compliquée - SQL/NoSQL - Programmation

Marsh Posté le 23-07-2004 à 11:27:37    

je suis en train d'essayer de refaire un exam de BD en vu de mon rattrapage
Et je bute sur une requete assez compliquée
Calculer la moyenne pondérée du module "statistiqe" pour chaque étudiant concerné (de 2 façons avec et sans requetes imbriquées)
 
voici le schéma
FILIERE (noFil, nomFil, noEnseign)
CYCLE (codeCycle, nomCycle)
ENSEIGNANT (noEnseign, nomEnseign, statut)
MODULE (noModule, libellé, noEnseign)
INTERVIENT (noEnseign, noModule)
ETUDIANT (noEtud, nomEtud, prenom, adresse)
INSCRIT (noEtud, noModule, codeCycle, noFil)
EPREUVE (codeEpreuve, type, date, coefficient, noModule)
EVAL (noEtud, codeEpreuve, note)
 
mon probleme se pose au niveau du calcul de la moyenne pondérée
AVG ne peut faire ça  
alors si vou avez une piste.....

Reply

Marsh Posté le 23-07-2004 à 11:27:37   

Reply

Marsh Posté le 23-07-2004 à 11:33:19    

t'as réussi à faire quoi jusqu'à maintenant (requète)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 23-07-2004 à 11:39:08    

bas rien!! déja le jour de l'exam j'ai pas fait cette question et aujourd'hui bien que j'ai le cours sous les yeux
j'arrive meme pas a commencer
vraiment je bloque

Reply

Marsh Posté le 23-07-2004 à 11:42:34    

commence par lister les notes de chaque étudiant pour le module statistique. ensuite reviens ici avec la requète


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 23-07-2004 à 11:43:02    

Peut etre ca :
Sum(note*coefficient) group by etudiant en faisant les jointures qui vont bien sur module, etudiant, inscrit, epreuve et eval.

Reply

Marsh Posté le 23-07-2004 à 11:43:23    

Piste : utilisation de SUM
 
Calcul : somme (Note*Coeff)/somme (coeff)

Reply

Marsh Posté le 23-07-2004 à 12:02:45    

R1= SELECT codeepreuve,coef FROM EPREUVE WHERE noMODULE=(SELECT noModule FROM Module WHERE libelle="stat" )
R2= SELECT note FROM Eval, R1 WHERE Eval.codeEpreuve=R1.codeepreuve

Reply

Marsh Posté le 23-07-2004 à 14:03:03    

houhou les gars c'est tellement moche ce que j'ai écrit que vous voulez p

Reply

Marsh Posté le 23-07-2004 à 14:07:03    

C'est de l'agébrique ou du sql que tu fais?
 
Et je suppose que le but de ta question est de répondre en une seule requete.
Essaie en suivant les pistes qu'on t'a donné

Reply

Marsh Posté le 23-07-2004 à 14:13:54    

plutot du sql (pardon j'ai pas précisé)
mais tu vois le truc c'est que d'une part on est sensé donner 2 types de requetes l'une avec des imbrications l'autre pas
et, de mon coté je galere. Faut dire que celle-la me bloque particulierement
Enfin j'essaye et e repasse dans l'apres midi

Reply

Marsh Posté le 23-07-2004 à 14:13:54   

Reply

Marsh Posté le 23-07-2004 à 14:22:36    

Select nomEtud, AVG(note)  
From Eval ev, Epreuve ep, Etudiant et, Module mo
Where ev.noEtud=et.noEtud
and ev.codeEpreuve=ep.codeEpreuve
and ep.noModule=mo.noModule
and mo.libelle="statistique"
 
ca doit etre ca je pense non?

Reply

Marsh Posté le 23-07-2004 à 16:56:15    

mectonium a écrit :

Select nomEtud, AVG(note)  
From Eval ev, Epreuve ep, Etudiant et, Module mo
Where ev.noEtud=et.noEtud
and ev.codeEpreuve=ep.codeEpreuve
and ep.noModule=mo.noModule
and mo.libelle="statistique"
 
ca doit etre ca je pense non?


moyenne non pondérée ici...
 
une requête sans garantie aucune
 

select Etu.noEtud, SUM(Eva.note*Epr.coefficient)/SUM(Epr.coefficient)
from module Mod, epreuve Epr, eval Eva, etudiant Etu, inscrit Ins
where Mod.libellé     = "statistique"
  and Mod.noModule    = Epr.noModule
  and Epr.codeEpreuve = Eva.codeEpreuve
  and Etu.noEtud      = Ins.noEtud
  and Ins.noModule    = Mod.noModule
group by Etu.noEtud


 
mais ca doit être un truc dans le genre.
 
Dans le where on selectionne l'ensemble des notes des étudiants pour le module "statistique".
On découpe étudiant par étudiant dans le group by.
Et dans le select on affiche le nom de l'étudiant suivi de sa moyenne pondérée...


Message édité par pains-aux-raisins le 23-07-2004 à 17:03:39
Reply

Marsh Posté le 23-07-2004 à 19:30:33    

Bon, déjà, on commence avec des données, sans chercher à faire de requête...
 
Mettons un étudiant qui a 3 notes, avec chacune un coefficient différent.
 


 9.5   5
15.0   3
12.5   8


 
Quelle est la moyenne pondérée ?
 
((9.5 * 5) + (15.0 * 3) + (12.5 * 8)) / (5 + 3 + 8)
 
Donc la moyenne pondérée est bien  
 
SUM(note * coef) / SUM(coef)
 
Ensuite, pas besoin d'aller chercher bien loin...
 
Tu commences par lier les différentes tables nécessaires pour récupérer toutes les note et leurs coefficients de tous les étudiants, pour toutes les matières.
T'ajoutes juste un critère sur la matière pour ne garder que "statistique". Vu que tu utilises des jointures "simples" (inner join) les étudiants qui ne suivent pas ce court sont directement jartés.
T'as donc plus qu'à ne conserver comme champs "nomEtud", "note" et "coef", puis appliquer la formule trouvée en début d'exercice.
 
En soit, elle n'a rien de compliqué cette requête.
 
Vu que pains-aux-raisins à l'air d'avoir fait ton exercice, t'as qu'à répondre à cette question (du même gabarit, à peine plus complexe)
 
Afficher les moyennes obtenues par les étudiants de chaque professeur, par matière et par filière.
 
Je veux un résultat avec pour entête :
 


NOM PROFESSEUR   FILIERE   MATIERE   MOYENNE


 
Puis une seconde :
 
Afficher les moyennes générales des étudiants ainsi que le nombre d'inscrits répartis par année de naissance pour chaque cycle.


Message édité par Arjuna le 23-07-2004 à 19:31:13
Reply

Marsh Posté le 26-07-2004 à 09:19:29    

ok les gars c'est sympa de m'avoir aidé, je vais essayer l'exo d'ARJUNA et je repasse

Reply

Marsh Posté le 27-07-2004 à 09:54:43    

Alors Arjuna peux tu m'expliquer si je suis sur la bonne voie ou pas
Tout dabord je dois joindre les tables enseignant intervient module etudiant inscrit epreuve eval
ensuite ben ensuite.........

Reply

Marsh Posté le 27-07-2004 à 10:56:28    

Oui c'est ça. Il faut aussi la filère pour retourner le nom de cette dernière.
 
Pour la suite, dans le résultat attendu, il y a un champ d'agrégation (la moyenne). Il faut donc un group by sur tous les autres champs. Ensuite, tu n'as qu'à faire comme dans le premier exercice.

Reply

Marsh Posté le 28-07-2004 à 10:13:13    

si je comprends bien il faut  
select Etud.nom prof.nom filiere.nom module.nom SUM(Eva.note*Epr.coefficient)/SUM(Epr.coefficient)  
from intervient module etudiant inscrit epreuve eval filiere
where
"c'est là que je sais pas quoi mettre"
group by etudiant.noetud
 

Reply

Marsh Posté le 28-07-2004 à 10:28:44    

Quelques conseils :
- N'oublie pas les virgules entre les attributs dans le SELECT (et le FROM aussi)
- Fais des jointures entre les tables que tu utilises de toute facon sinon c'est le produit cartésien alors...
- Sur le forum, met le code dans des blocs de code, c'est tout de suite beaucoup plus lisible

Reply

Marsh Posté le 28-07-2004 à 14:29:38    

Comme hop le fou.
 
En insistant bien sur le second point.
 
Avant de te demander ce qui doit intervenir dans ton WHERE, suis-simplement les flèches de ton MPD, et traduit-les en jointures :
 
Table1.FK = Table2.PK
 
Une fois que tu as ça, ce qui est totalement "automatique", tu as 80% de la requête qui est terminée.
 
Sinon, conseil : au lieu de te demander quels champs retournés à partir de quelles tables, pour être sur de ne rien oublier, fait comme moi.
 
Tu pars d'une table (Professeur par exemple) puis petit à petit, afin de retrouvers les infos qui entrent en jeu dans le select et les éventuels filtres, tu rajoutes des tables à ta table. A chaque modification, si tu as la base sous la main, teste que ça retourne bien ce qu'il faut.
 
C'est le seul moyen que je connaisse pour écrire des requêtes complexes. Essayer de tout planifier à l'avance, c'est le meilleur moyen d'oublier un critère de jointure et passer deux jours à trouver ce qui merde dans une requête de 25 lignes.
 
Faut pas croire que j'écris ce genre de requêtes d'un jet ;)
 


select 'insert into prx (typprx, typtie, sigtie, codpro, prxvdu, qtemin, coddev, etbcod, codbar, sigrep, codeop, pricestatus) values (''' || typprx || ''', ''' || typtie || ''', ''' || sigtie || ''', ''' || codpro || ''', ' || prxvdu || ', ' || qtemin || ', ''' || coddev || ''', ''' || etbcod || ''', ''' || codbar || ''', ''' || sigrep || ''', ''' || codeop || ''', ''' || pricestatus || ''');'
from (
-- Corporate and Standard Prices:
-- Select * from tas
-- if codreg = ' ' then 'Corporate' else 'Standard'
select decode(tas.codreg, ' ', '10.Corporate', '09.Standard') typprx, 'CLI' typtie, ' ' sigtie, tas.codpro, tas.prxstd1 prxvdu, 1 qtemin, tas.coddev, tas.codreg etbcod, ' ' codbar, ' ' sigrep, ' ' codeop, '1' pricestatus
from tas, zod, pro
where pro.codsoc = 0
and pro.codblocage in ('11','11B', 'INV', '15')
and not (pro.fampro = '5BSERV' and pro.sfapro = 'CHARGE')
and upper(substr(pro.codpro, 3, 1)) != 'X'
and zod.codsoc = 0
and zod.typzod = 'PRO'
and zod.numzod = '109'
and zod.valzod != ' '
and zod.clezod = pro.codpro
and tas.codsoc = 0
and tas.achvte = 'V'
and tas.codpro = zod.clezod
and to_char(sysdate, 'YYYYMMDD') between tas.datapp1 and decode(tas.datval1, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval1)
and not (to_char(sysdate, 'YYYYMMDD') between tas.datapp2 and decode(tas.datval2, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval2) and tas.datapp2 > tas.datapp1)
and not (to_char(sysdate, 'YYYYMMDD') between tas.datapp3 and decode(tas.datval3, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval3) and tas.datapp3 > tas.datapp1)
union all
-- Quantity Level Prices
-- Select * from tac where codbar <> ' '
select decode(tac.codreg, ' ', '08.Quantity GIE', '07.Quantity REG') typprx, 'CLI' typtie, ' ' sigtie, tac.codpro, tac.prxcol1 prxvdu, tac.qtemin, tac.coddev, tac.codreg etbcod, tac.codbar, ' ' sigrep, ' ' codeop, '1' pricestatus
from tac, tas, zod, pro
where pro.codsoc = 0
and pro.codblocage in ('11','11B', 'INV', '15')
and not (pro.fampro = '5BSERV' and pro.sfapro = 'CHARGE')
and upper(substr(pro.codpro, 3, 1)) != 'X'
and zod.codsoc = 0
and zod.typzod = 'PRO'
and zod.numzod = '109'
and zod.valzod != ' '
and zod.clezod = pro.codpro
and tas.codsoc = 0
and tas.achvte = 'V'
and tas.codpro = zod.clezod
and to_char(sysdate, 'YYYYMMDD') between tas.datapp1 and decode(tas.datval1, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval1)
and not (to_char(sysdate, 'YYYYMMDD') between tas.datapp2 and decode(tas.datval2, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval2) and tas.datapp2 > tas.datapp1)
and not (to_char(sysdate, 'YYYYMMDD') between tas.datapp3 and decode(tas.datval3, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval3) and tas.datapp3 > tas.datapp1)
and tac.codsoc = 0
and tac.achvte = 'V'
and tac.codpro = tas.codpro
and tac.codreg = tas.codreg
and tac.codbar = ' '
union all
-- Scale Prices
-- Select * from tac where codbar = ' '
select decode(tac.codreg, ' ', '06.Scale GIE', '05.Scale REG') typprx, 'CLI' typtie, ' ' sigtie, tac.codpro, tac.prxcol1 prxvdu, tac.qtemin, tac.coddev, tac.codreg etbcod, tac.codbar, tbl.lib2 sigrep, ' ' codeop, tbl.lir pricestatus
from tbl, tac, tas, zod, pro
where pro.codsoc = 0
and pro.codblocage in ('11','11B', 'INV', '15')
and not (pro.fampro = '5BSERV' and pro.sfapro = 'CHARGE')
and upper(substr(pro.codpro, 3, 1)) != 'X'
and zod.codsoc = 0
and zod.typzod = 'PRO'
and zod.numzod = '109'
and zod.valzod != ' '
and zod.clezod = pro.codpro
and tas.codsoc = 0
and tas.achvte = 'V'
and tas.codpro = zod.clezod
and to_char(sysdate, 'YYYYMMDD') between tas.datapp1 and decode(tas.datval1, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval1)
and not (to_char(sysdate, 'YYYYMMDD') between tas.datapp2 and decode(tas.datval2, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval2) and tas.datapp2 > tas.datapp1)
and not (to_char(sysdate, 'YYYYMMDD') between tas.datapp3 and decode(tas.datval3, ' ', to_char(sysdate, 'YYYYMMDD'), tas.datval3) and tas.datapp3 > tas.datapp1)
and tac.codsoc = 0
and tac.achvte = 'V'
and tac.codpro = tas.codpro
and tac.codreg = tas.codreg
and tac.codbar <> ' '
and tbl.codsoc = 0  
and tbl.codtbl = '310'  
and tbl.lir = tac.codbar  
and tbl.lib3 = decode(tac.codreg, ' ', 'GIE', tac.codreg)  
and tbl.numbe1 in (1, 2)
union all
-- Specific Price CLI : tqui = 1 / tqoi = 501  
select '04.Specific Price CLI' typprx, tie.typtie, tie.sigtie, pro.codpro, cts.prxnet prxvdu, cts.qtemin, cts.coddev, cts.etbcod, tie.codbar, tie.sigrep, ' ' codeop, '1' pricestatus
from cts, zod, pro, tie
where tie.codsoc = 0
and tie.typtie = 'CLI'
and tie.codett = 'CUS'  
and pro.codsoc = 0
and pro.codblocage in ('11','11B', 'INV', '15')
and not (pro.fampro = '5BSERV' and pro.sfapro = 'CHARGE')
and upper(substr(pro.codpro, 3, 1)) != 'X'
and zod.codsoc = 0
and zod.typzod = 'PRO'
and zod.numzod = '109'
and zod.valzod != ' '
and zod.clezod = pro.codpro
and cts.codsoc = 0
and cts.achvte = 'V'
and cts.typcot = 'LIG'
and cts.tqui = '1'  
and cts.tqoi = '501'
and cts.codcre = 'PRN'
and to_char(sysdate, 'YYYYMMDD') between cts.datapp and cts.datval
and cts.clequi = tie.sigtie
and cts.cleqoi = pro.codpro
and cts.datapp = (select max(cts2.datapp)  
         from cts cts2
      where cts2.codsoc = cts.codsoc
      and cts2.achvte = cts.achvte
      and cts2.typcot = cts.typcot
      and cts2.tqui = cts.tqui  
      and cts2.tqoi = cts.tqoi
      and cts2.codcre = cts.codcre
      and to_char(sysdate, 'YYYYMMDD') between cts2.datapp and cts2.datval
      and cts2.clequi = cts.clequi
      and cts2.cleqoi = cts.cleqoi)
union all  
-- Specific Price GRC : tqui = 3 / tqoi = 501  
select '03.Specific Price GRC' typprx, tie.typtie, tie.sigtie, pro.codpro, cts.prxnet prxvdu, cts.qtemin, cts.coddev, cts.etbcod, tie.codbar, tie.sigrep, ' ' codeop, '1' pricestatus
from cts, zod, pro, tie
where tie.codsoc = 0
and tie.typtie = 'GRC'
and tie.codett = 'CUS'  
and pro.codsoc = 0
and pro.codblocage in ('11','11B', 'INV', '15')
and not (pro.fampro = '5BSERV' and pro.sfapro = 'CHARGE')
and upper(substr(pro.codpro, 3, 1)) != 'X'
and zod.codsoc = 0
and zod.typzod = 'PRO'
and zod.numzod = '109'
and zod.valzod != ' '
and zod.clezod = pro.codpro
and cts.codsoc = 0
and cts.achvte = 'V'
and cts.typcot = 'LIG'
and cts.tqui = '3'  
and cts.tqoi = '501'
and cts.codcre = 'PRN'
and to_char(sysdate, 'YYYYMMDD') between cts.datapp and cts.datval
and cts.clequi = tie.sigtie
and cts.cleqoi = pro.codpro
and cts.datapp = (select max(cts2.datapp)  
         from cts cts2
      where cts2.codsoc = cts.codsoc
      and cts2.achvte = cts.achvte
      and cts2.typcot = cts.typcot
      and cts2.tqui = cts.tqui  
      and cts2.tqoi = cts.tqoi
      and cts2.codcre = cts.codcre
      and to_char(sysdate, 'YYYYMMDD') between cts2.datapp and cts2.datval
      and cts2.clequi = cts.clequi
      and cts2.cleqoi = cts.cleqoi)
union all
-- Specific Price GRC : tqui = 4 / tqoi = 501
-- And cts.clequi = cnx.numcnt
select '02.Agreement' typprx, tie.typtie, tie.sigtie, pro.codpro, cts.prxnet prxvdu, cts.qtemin qte, cts.coddev, cts.etbcod, tie.codbar, tie.sigrep, ' ' codeop, '1' pricestatus
from cts, zod, pro, cnt, tie
where tie.codsoc = 0
and tie.typtie in ('CLI', 'GRC')
and tie.codett = 'CUS'  
and cnt.codsoc = 0
and cnt.achvte = 'V'
and cnt.typeve = 'CNT'
and to_char(sysdate, 'YYYYMMDD') between cnt.datapp and cnt.datval
and cnt.typtie = tie.typtie
and cnt.sigtie = tie.sigtie
and pro.codsoc = 0
and pro.codblocage in ('11','11B', 'INV', '15')
and not (pro.fampro = '5BSERV' and pro.sfapro = 'CHARGE')
and upper(substr(pro.codpro, 3, 1)) != 'X'
and zod.codsoc = 0
and zod.typzod = 'PRO'
and zod.numzod = '109'
and zod.valzod != ' '
and zod.clezod = pro.codpro
and cts.codsoc = 0
and cts.achvte = 'V'
and cts.typcot = 'LIG'
and cts.tqui = '4'  
and cts.tqoi = '501'
and cts.codcre = 'PRN'
and to_char(sysdate, 'YYYYMMDD') between cts.datapp and cts.datval
and cts.clequi = cnt.numcnt
and cts.cleqoi = pro.codpro
union all
-- Promotion : tqui = 85 / tqoi = 501
-- Need to match codeop each time the user look for prices (need to be entered mannualy)  
select '01.Promotion' typprx, tie.typtie, tie.sigtie, pro.codpro, cts.prxnet prxvdu, cts.qtemin, cts.coddev, tie.etbcod, tie.codbar, tie.sigrep, ope.codeop, '1' pricestatus
from cts, zod, pro, tie, opc, ope
where ope.codsoc = 0
and to_char(sysdate, 'YYYYMMDD') between ope.datdeb and ope.datfin
and opc.codsoc = 0
and opc.codeop = ope.codeop
and opc.typtie in ('CLI', 'GRC')
and tie.codsoc = 0
and tie.typtie = opc.typtie
and tie.sigtie = opc.sigtie
and tie.codett = 'CUS'
and pro.codsoc = 0
and pro.codblocage in ('11','11B', 'INV', '15')
and not (pro.fampro = '5BSERV' and pro.sfapro = 'CHARGE')
and upper(substr(pro.codpro, 3, 1)) != 'X'
and zod.codsoc = 0
and zod.typzod = 'PRO'
and zod.numzod = '109'
and zod.valzod != ' '
and zod.clezod = pro.codpro
and cts.codsoc = 0
and cts.achvte = 'V'
and cts.typcot = 'LIG'
and cts.tqui = '85'  
and cts.tqoi = '501'
and cts.codcre = 'PRN'
and cts.clequi = ope.codeop
and cts.cleqoi = pro.codpro
) tmp

Reply

Marsh Posté le 28-07-2004 à 21:38:04    

bof c'est seulement une grosse union de requêtes simples :D ;)

Reply

Marsh Posté le 28-07-2004 à 22:29:41    

Simples simples, certes, m'enfin certaines règles sont loin d'être évidentes ;)

Reply

Marsh Posté le 29-07-2004 à 14:37:19    

Arjuna t'es trop fort!!
Alors voila je vous propose une autre requete sur le meme schema
Quels sont les nnumero de modules ou tous les enseignants interviennent?
j'ai essayé
SELECT noModule FROM Enseignant, Intervient
WHERE
 COUNT (Enseignant.Noenseign)= COUNT (Intervient.noEnseign)GROUP BY noModule
 
je suis pas sur parce que jai jamais vu un COUNT dans le WHERE

Reply

Marsh Posté le 29-07-2004 à 14:42:13    

Tu peux faire comme ça par exemple :
 

Code :
  1. SELECT noModule from
  2. (SELECT noModule, count(*) FROM Intervient
  3. HAVING count(*) = (select count(*) from Enseignant))


 
sinon on peut aussi le faire avec des EXISTS ou des jointures externe je pense ...

Reply

Marsh Posté le 29-07-2004 à 14:47:24    

ouais en fait ça serai bien si je pouvais avoir les 2 versoins (select imbriqués et jointures)
Au fait beegee c'est faux ce que j'ai fait?

Reply

Marsh Posté le 29-07-2004 à 14:48:46    

atic a écrit :

ouais en fait ça serai bien si je pouvais avoir les 2 versoins (select imbriqués et jointures)
Au fait beegee c'est faux ce que j'ai fait?

bon t'as finir de faire faire tes TP ou quoi ? :pfff:


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2004 à 14:51:20    

Mais non je demande un coup de main ni plus ni moins
je suis en train de refaire un exam que j'ai foiré en vu de mon rattrapage en septembre
Apres si meme ça c'est interdit.....

Reply

Marsh Posté le 29-07-2004 à 14:52:42    

mais non mais non :D


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2004 à 15:36:53    

hey BeeGee
ça te dit kelke chose cette requete?
SELECT Nomodule FROM Intervient, Module, Enseignant
WHERE Intervient.noModule=Module.noModule
AND   Intervient.noEnseign=Enseignant.noEnseign
AND   Intervient.noEnseign=Module.noEnseign
GROUP BY noModule

Reply

Marsh Posté le 29-07-2004 à 15:44:30    

La dernière ligne me semble plutôt :
 
AND   Enseignant.noEnseign=Module.noEnseign

Reply

Marsh Posté le 29-07-2004 à 15:55:10    

Ah oui en fesant cela on s'assure que TOUS les enseignants SANS exception interviennent dans ce module
et au niveau du GROUP BY c'est bien ça?

Reply

Marsh Posté le 29-07-2004 à 16:40:24    

Non, tu va juste retrouver la liste des enseignants qui enseignent pour chaque module.
Tu ne t'assures pas encore de savoir si ils y sont sous.

Reply

Marsh Posté le 30-07-2004 à 09:27:24    

Attends Arjuna ya un truc qui m'échappe
en faisant la requete avec ta derniere ligne j'ai l'impression qu'on verifie bien que tous les enseignants interviennent bien dans le module choisit
En effet on choisit un num de module et grace a la table intervient on prend tous les num d'enseignant et grace a ta derniere ligne Ben il faut forcement que tous les numero d"enseignat present dans la table enseignant se retrouvent dans la table module en etant associé au num de module choisit
Je crois que la requete est complete avec la ligne d'arjuna
qu'en pensez vous?

Reply

Marsh Posté le 30-07-2004 à 10:28:12    

Non, tu sélectionnes juste tous les numéros de modules !
 
Imaginons que les seuls modules actuellement en base sont ceux pour lesquels 2 enseignants toto et tata (toujours les mêmes) ont participé (et aucun autre, et pourtant ils sont 6 au total). Ta requête renverra tous ces modules ... et pourtant aucun de ces modules n'a été enseigné par tous les enseignants.
 
En fait, si toutes les tables qui dépendent les unes des autres sont bien remplies, ta requêtes est équivalente à :
 
SELECT Nomodule FROM Module;
 
:D

Reply

Marsh Posté le 30-07-2004 à 10:37:41    

C'est dommage mais j'ai rien pour tester  
Regarde dans ma requete
_je choisit un num de module
_ensuite je m'assure que tous les num enseignant de ma table enseignant se retrouvent bien dans ma table intervient tout en étant associé au num de module choisi
Je vois vraiment pas l'erreur!!
mais je dis pas qui y'en a pas

Reply

Marsh Posté le 30-07-2004 à 15:46:33    

Ta requête ne fait pas ça :
 
"_ensuite je m'assure que tous les num enseignant de ma table enseignant se retrouvent bien dans ma table intervient tout en étant associé au num de module choisi"
 
Elle ne fait que récupérer la liste des enseignants qui interviennent sur ce module. En aucun cas on vérifie qu'ils y sont tous.

Reply

Marsh Posté le 30-07-2004 à 16:02:13    

je vois Ben là franchement c'est chaud avec les jointures autant avec les requetes imbriquées je capte que là c'est le beug dans ma tete

Reply

Marsh Posté le 30-07-2004 à 16:50:17    

vi, y'a deux câbles qui se touchent dans ta tête ;)
 
repart sur des requêtes plus simples afin de mieu comprendre le fonctionnement de toutes ces requêtes.
 
commence simplement : récupère le nom du plus jeune étudiant de la table des élèves.
refait ensuite la requête en retournant l'élève le plus jeune pour chaque cycle.


Message édité par Arjuna le 30-07-2004 à 16:50:50
Reply

Marsh Posté le 30-07-2004 à 16:54:15    

c'est super des gens comme vous ;)
 
vous vous faîtes "chier" à comprendre les problèmes des autres, et à aider les gens gratuitement !
 
c'est vraiment bien de votre part ;)
 
quand j'aurais du temps, un jour... j'aiderai les gens... (si j'en ai les connaissances bien sûr)
 

Arjuna a écrit :

Bon, déjà, on commence avec des données, sans chercher à faire de requête...
 
Mettons un étudiant qui a 3 notes, avec chacune un coefficient différent.
 


 9.5   5
15.0   3
12.5   8


 
Quelle est la moyenne pondérée ?
 
((9.5 * 5) + (15.0 * 3) + (12.5 * 8)) / (5 + 3 + 8)
 
Donc la moyenne pondérée est bien  
 
SUM(note * coef) / SUM(coef)
 
Ensuite, pas besoin d'aller chercher bien loin...
 
Tu commences par lier les différentes tables nécessaires pour récupérer toutes les note et leurs coefficients de tous les étudiants, pour toutes les matières.
T'ajoutes juste un critère sur la matière pour ne garder que "statistique". Vu que tu utilises des jointures "simples" (inner join) les étudiants qui ne suivent pas ce court sont directement jartés.
T'as donc plus qu'à ne conserver comme champs "nomEtud", "note" et "coef", puis appliquer la formule trouvée en début d'exercice.
 
En soit, elle n'a rien de compliqué cette requête.
 
Vu que pains-aux-raisins à l'air d'avoir fait ton exercice, t'as qu'à répondre à cette question (du même gabarit, à peine plus complexe)
 
Afficher les moyennes obtenues par les étudiants de chaque professeur, par matière et par filière.
 
Je veux un résultat avec pour entête :
 


NOM PROFESSEUR   FILIERE   MATIERE   MOYENNE


 
Puis une seconde :
 
Afficher les moyennes générales des étudiants ainsi que le nombre d'inscrits répartis par année de naissance pour chaque cycle.

Reply

Marsh Posté le 30-07-2004 à 17:11:26    

C'est surtout que je m'emmerde grave pendant de mes requêtes me rappatrient leurs 25 millions de lignes :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed