Pistoletabilles Posted October 28, 2021 Share Posted October 28, 2021 (edited) Bonjour, Depuis le passage à l'OSS pour la tva, mon responsable me demande de lui sortir le chiffre d'affaire par pays de livraison et par moyen de paiement. J'ai fait une requête me permettant de sortir ce que je veux mais je ne comprends pas où est mon erreur car les chiffres sont multipliés par 8 dès que je veux rajouter le nom du pays. SELECT c.`name` AS `PAYS`, COUNT(o.`id_order`) AS `Nombre_total_cmde`, ROUND(SUM(o.`total_paid_tax_excl`), 2) AS `CA_HT` FROM `ps_orders` o LEFT JOIN ps_address a ON o.`id_customer` = a.`id_customer` LEFT JOIN ps_country_lang c ON c.`id_country` = a.`id_country` WHERE o.`date_add` >= '2021-09-01 0:0:0' AND o.`date_add` <= '2021-09-30 23:59:59' AND o.`current_state` IN (2, 3, 4 ,5, 9, 25, 26, 20, 31, 32, 33) AND o.`module` IN ('paypal') GROUP BY a.`id_country` Merci d'avance de vos réponses ou s'il y a un post traitant de ce sujet Edited October 28, 2021 by Pistoletabilles arrangement du code (see edit history) Link to comment Share on other sites More sharing options...
JulienPct Posted October 28, 2021 Share Posted October 28, 2021 (edited) Bonjour, Effectivement si je fais le test de mon côté j'obtiens un nombre de valeur supérieur de commandes lorsque j'effectue ma jointure avec la table ps_country_lang. Certaines commandes sont dédoublées avec plusieurs id_country chacune. Cela doit être à cause de la table ps_address. On peut voir, si on affiche toutes les valeurs de cette table, que les id_customer peuvent être associés à plusieurs id_address, lors de la jointure avec la table ps_country_lang, les valeurs données de certains pays sont donc récupérés plusieurs fois et, par conséquent, les commandes sont dédoublés. Vous pourrez d'ailleurs remarquer, normalement, qu'en changeant le GROUP BY par o.id_order, certains prix seront en double. Edited October 28, 2021 by JulienPct (see edit history) Link to comment Share on other sites More sharing options...
Pistoletabilles Posted October 28, 2021 Author Share Posted October 28, 2021 Merci JulienPct, grâce à ton explication j'ai pu trouver la solution, il a suffit d'ajouter une condition sur ps_country_lang. Voici le code fonctionnel : SELECT cl.`name` AS `PAYS`, COUNT(o.`id_order`) AS `Nombre_total_cmde`, ROUND(SUM(o.`total_paid_tax_excl`), 2) AS `CA_HT` FROM `ps_orders` o LEFT JOIN ps_address a ON o.`id_customer` = a.`id_customer` LEFT JOIN ps_country_lang cl ON cl.`id_country` = a.`id_country` WHERE o.`date_add` >= '2021-09-01 0:0:0' AND o.`date_add` <= '2021-09-30 23:59:59' AND o.`current_state` IN (2, 3, 4 ,5, 9, 25, 26, 20, 31, 32, 33) AND o.`module` IN ('paypal') AND cl.`id_lang` = 1 GROUP BY a.`id_country` Link to comment Share on other sites More sharing options...
JulienPct Posted October 28, 2021 Share Posted October 28, 2021 (edited) J'en avais une autre, à la place de join sur id_customer, tu devrais joindre sur o.id_address_invoice et a.id_address SELECT cl.`name` AS `PAYS`, COUNT(o.`id_order`) AS `Nombre_total_cmde`, ROUND(SUM(o.`total_paid_tax_excl`), 2) AS `CA_HT` FROM `ps_orders` o LEFT JOIN ps_address a ON o.`id_address_invoice` = a.`id_address` LEFT JOIN ps_country_lang cl ON cl.`id_country` = a.`id_country` WHERE o.`date_add` >= '2021-09-01 0:0:0' AND o.`date_add` <= '2021-09-30 23:59:59' AND o.`current_state` IN (2, 3, 4 ,5, 9, 25, 26, 20, 31, 32, 33) AND o.`module` IN ('paypal') GROUP BY a.`id_country` Edited October 28, 2021 by JulienPct (see edit history) Link to comment Share on other sites More sharing options...
Pistoletabilles Posted October 28, 2021 Author Share Posted October 28, 2021 Merci c'est parfait ! Sujet résolu Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now