Jump to content

[1.7.7.4] Requête SQL nombre de commande par pays de livraison


Recommended Posts

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 by Pistoletabilles
arrangement du code (see edit history)
Link to comment
Share on other sites

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 by JulienPct (see edit history)
Link to comment
Share on other sites

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

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 by JulienPct (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...