SQL-Porquoi c'est faux?
Résolu
natrop
Messages postés
6
Statut
Membre
-
natrop Messages postés 6 Statut Membre -
natrop Messages postés 6 Statut Membre -
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;
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:
- SQL-Porquoi c'est faux?
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
4 réponses
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.
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.
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.
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.
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.
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+
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+
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
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