Tri et calcul entre deux tables MySQL - SQL/NoSQL - Programmation
Marsh Posté le 02-07-2006 à 02:50:59
On va bien décomposer les trucs, tu va voir, ca va aller tout seul
On prend :
- une tb_fab qui fera la somme, par produit, des produits fabriqués
- une tb_vend qui fera la somme, par produit, des produits vendus
Ca va donner un truc dans le genre ;
SELECT table3.prod_desc, IFNULL(tb_fab.fab_sum, 0) AS fab_qte, IFNULL(tb_vend.vend_sum, 0) AS vend_qte, (fab_qte-vend_qte) AS difference
FROM table3
LEFT JOIN (
SELECT prod_id, SUM(prod_qte) AS fab_sum FROM table1 GROUP BY prod_id
) AS tb_fab ON table3.prod_id=tb_fab.prod_id
LEFT JOIN (
SELECT prod_id, SUM(prod_qte) AS vend_sum FROM table2 GROUP BY prod_id
) AS tb_vend ON table3.prod_id=tb_vend.prod_id
ORDER BY table3.prod_id
N'ayant pas de MySQL à portée de clavier, c'est surement bourré de faute de syntaxe mais je pense que l'idée y est
Marsh Posté le 02-07-2006 à 13:16:56
Plus simplement :
Code :
|
Marsh Posté le 02-07-2006 à 15:17:29
mrbebert a écrit : On va bien décomposer les trucs, tu va voir, ca va aller tout seul |
Merci pour la reponse, j'ai essaye avec ce code, j'ai juste change les noms des tables pour correspondre a la base.
Il me fait une erreur en me disant que "fab_qte" est inconnu, j'ai beau regarder le code je vois pas pourquoi !
Marsh Posté le 02-07-2006 à 15:19:46
Beegee a écrit : Plus simplement :
|
J'ai egalement essaye ce code, il y a un truc que le MySQL n'apprecie pas avec la commande JOIN, dans le doute j'ai change ma version de MySQL et je suis passe de la 4.1.9 a la 5, meme resultat !?
Marsh Posté le 02-07-2006 à 15:23:10
Désolé, j'avais pas fini la requête
Code :
|
Marsh Posté le 02-07-2006 à 15:28:42
Triple T a écrit : Merci pour la reponse, j'ai essaye avec ce code, j'ai juste change les noms des tables pour correspondre a la base. |
Curieux
Ca doit être dans le calcul de la colonne "difference". Faut peut être réécrire le SELECT de cette manière :
SELECT table3.prod_desc
, IFNULL(tb_fab.fab_sum, 0) AS fab_qte
, IFNULL(tb_vend.vend_sum, 0) AS vend_qte
, (IFNULL(tb_fab.fab_sum, 0)-IFNULL(tb_vend.vend_sum, 0)) AS difference
Marsh Posté le 02-07-2006 à 16:42:31
Beegee a écrit : Désolé, j'avais pas fini la requête
|
Maintenant le code passe sans erreur, par contre les donnees extraites sont erronees !?
Marsh Posté le 02-07-2006 à 16:46:38
mrbebert a écrit : Curieux |
J'ai corrige le code avec ces indications, et tout fonctionne, il semblerais donc que MySQL soit chatouilleux sur la syntaxe.
Merci pour tout, apres quelques heures de prise de tete c'est un soulagement de voir apparaitre les donnees
Marsh Posté le 02-07-2006 à 02:02:11
Bonjour tout le monde,
Ca fait quelques heures que je cherche desesperement comment sortir une stat entre les champs de deux tables, voici la structure des tables:
table1:
fab_id, prod_id, prod_qte
100, 1, 2000
101, 3, 1000
102, 1, 1000
103, 2, 4000
table2:
vente_id, prod_id, prod_qte
101, 2, 3000
102, 3, 1000
103, 1, 1000
104, 1, 1000
table3:
prod_id, prod_desc
1, produit1
2, produit2
3, produit3
Ce que je cherche a obtenir c'est le resultat suivant:
table3.prod_desc, table1.prod_qte, table2.prod_qte, difference
produit1, 3000, 2000, 1000
produit2, 4000, 3000, 1000
produit3, 1000, 1000, 0
Avec le code suivant j'ai reussi a trier et additionner les differents produits pour une des tables, la ou je seche, c'est comment faire pour appliquer ce code sur les deux tables et ensuite faire la soustraction ou difference... je suis plutot dans la categorie des debutants avec le SQL, et la je commence a craquer :-( je sais plus ou chercher !
SELECT produits.prod_desc, SUM(prod_qte/1000) AS litres FROM hist_ventes, produits
WHERE (hist_ventes.prod_id = produits.prod_id)
GROUP BY hist_ventes.prod_id
ORDER BY produits.prod_desc, hist_ventes.date_vente