SQL-Porquoi c'est faux?

Résolu
natrop Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
natrop Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Est-ce que vous pourriez me dire pourquoi c'est faux conceptuellement (meme si ça marche très bien) et quelle est la solution? merci

La table Composants contient les champs Comp_Cod, Comp_Cout
La table CompArt les champs Comp_Cod,Art_Cod et CompArt_Qt
La table Articles Art_Cod, Art_Prix,Art_TVA, Art_Frais_Envoi
La table ComArt Art_Cod,Com_Cod et ComArt_Qt

Le but est d'arriver à:
Recette Commandes | Cout Commandes | Bénéfice commandes
-------------------------------------------------------------------------
"montant" | "montant" | "montant"

SELECT SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) "Recette Commandes", SUM(ComArt_Qt*(SUM(CompArt_Qt*Comp_Cout))) "Cout Commandes", SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi))-SUM(ComArt_Qt*(SUM(CompArt_Qt*Comp_Cout))) "Bénéfice Commandes"
FROM Composants
INNER JOIN CompArt USING (Comp_Cod)
INNER JOIN Articles USING (Art_Cod)
INNER JOIN ComArt USING (Art_Cod)
GROUP BY ComArt_Qt, Art_Prix, Art_TVA, Art_Frai_Envoi;
A voir également:

4 réponses

kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) "Recette Commandes", 


doit devenir :
SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) AS "Recette Commandes", 


Il me semble.

Sinon je n'ai pas trop compris, cette requete fonctionne dans ton programme mais tu voudrais savoir si conceptuellement c'est correct, c'est ca ?
Ou si la base de données fonctionne, mais la requête non.

0
natrop Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
merci de ton intéret

Le AS n'est pas un pb, ça marche quand meme.
Le pb c'est que j'ai fait cet exercice en cours et il fonctionne très bien, mais le prof m'a dit que c'était faux, sans pouvoir m'expliquer pourquoi. Je n'arrive pas à comprendre comment le faire juste, vu que ma logique a été celle-là, alors j'aimerais que l'on m'explique pourquoi le programme est faux, bien qu'il marche et quelle serait la solution, merci.
0
blux Messages postés 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Salut,

si le prof te dit que c'est faux, mais n'est pas en mesure de dire pourquoi, je ne saurais trop te recommander de changer d'école !!!

Ou alors le prof n'en est pas un, et il fait du 'par coeur'...
0
natrop Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Je lui laisse jusqu'au prochain cours pour etudier la question et me trouver une explication. En attendant, j'aimerais que qqun puisse éclairer ma lanterne.

Apparemment, le fait du faire un GROUP BY sur ces champs-là est un pb et aussi de mettre un SUM d'un SUM dans le SELECT.

aiutoooooooooo
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
En fait oui j'avais pas vraiment vu l'ensemble de ta requete, mais ton prof a raison dans le sens ou il veut dire que ce n'est pas une maniere tres propres de le faire... même si ca fonctionne.

Pour les SUM de SUM, j'imagine que ton prof pense plutot à faire des sous requètes. Et il te donnera certainement la réponse la semaine prochaine.

Pour ma part c'est déjà tellement loin que je saurais même plus expliquer ca ^^ ni même en faire proprement alors je vais m'abstenir :p

Bon courage.
0
natrop Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
ok
merci de m'avoir quand meme répondu.

si qqun veut me donner la solution "propre"....

en attendant, je cherche....
0
natrop Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
personne veut m'aider ?
0
c moi
 
slt,
perso j'aurais écrit la même chose, ça me parait très logique et en plus si ça marche que demander de plus ????

je suis d'accord avec d'autres, si ton prof ne sait pas expliquer ce qu'il veut que tu écrives .... y a un problème .... un prof doit être capable d'expliquer sa théorie qu'il enseigne !!!!
s'il propose une autre solution .... elle sera à mon avis plus longue.
j'aimerai la connaitre, rien que pour réviser moi même mon savoir !!!
a+
0
natrop Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
salut,

merci de ton soutien. j'en ai donc discuté avec le prof qui m'a répondu que oui c'est juste mais par principe, dans une base de données, on ne peut pas créer un champ calculé à partir d'autres champs calculés (cf calcul de "Bénéfice Commandes" ). donc la réponse est qu'il faut obligatoirement passer par 2 sous-requetes pour arriver au résultat du bénéfice.



CREATE TABLE Calculs
( Recette NUMBER(10,2),
Cout NUMBER(10,2)
);

INSERT INTO Calculs
VALUES (( SELECT SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) "Recette Commandes"
FROM Magasins
INNER JOIN Commandes USING (Mag_Cod)
INNER JOIN ComArt USING (Com_Cod)
INNER JOIN Articles USING (Art_Cod)
),
( SELECT SUM(Com_Cout*CompArt_Qt*ComArt_Qt) "Cout Commandes"
FROM Composants
INNER JOIN CompArt USING (Comp_Cod)
INNER JOIN Articles USING (Art_Cod)
INNER JOIN ComArt USING (Art_Cod));

SELECT Recette-Cout "Bénéfice"
FROM Calculs;

Et voilà !
merci
0