Bonjour à tous. J’ai besoin d’une petite aide/explication SQL SVP.
Pour résumé, pour faire des calculs de chiffre d’affaire, je fais la SUM des prix TTC de ces 2 tables : order_basket__product et order_basket__service
C’est une req SQL que je fais car je souhaite faire des stats de chiffres d’affaires mensuels (d’où le GROUP BY).
J’ai donc fait cette req SQL :
Afin de faciliter mon exemple, ici (dans les sous-requêtes) j’ai remplacé les SUM directement par des valeurs en dur, qui ici sont de 40.00 et de 41.00 :
SELECT
for_shop_id AS shop_id,
in_month AS dateForInMonth,
SUM(sum_in_month) AS result_CA
FROM (
-- Augmenter result_CA avec somme des product_price_ttc des order_basket__product
SELECT
shops.id AS for_shop_id,
DATE_FORMAT(order_basket__product.created_at,"%Y-%m") AS in_month,
40.00 AS sum_in_month -- ICI
FROM order_basket__product
INNER JOIN orders_baskets
ON orders_baskets.id = order_basket__product.order_basket_id
INNER JOIN orders
ON orders_baskets.order_id = orders.id
INNER JOIN shops
ON orders.shop_id = shops.id
WHERE YEAR(order_basket__product.created_at) = 2021
GROUP BY
for_shop_id,
in_month
UNION
-- Augmenter result_CA avec somme des service_price_ttc des order_basket__service
SELECT
shops.id AS for_shop_id,
DATE_FORMAT(order_basket__service.created_at,"%Y-%m") AS in_month,
40.00 AS sum_in_month -- ICI
FROM order_basket__service
INNER JOIN orders_baskets
ON orders_baskets.id = order_basket__service.order_basket_id
INNER JOIN orders
ON orders_baskets.order_id = orders.id
INNER JOIN shops
ON orders.shop_id = shops.id
WHERE YEAR(order_basket__service.created_at) = 2021
GROUP BY
for_shop_id,
in_month
) alias_ignored
GROUP BY
shop_id,
dateForInMonth
Le problème : c’est qu’ici result_CA retourne 40.00 au lieux de 80.00
Et ici :
La seule différence par rapport à la req SQL de ci-dessus, c’est que j’ai remplacé 40.00 par 41.00 pour la somme de la table order_basket__product
SELECT
for_shop_id AS shop_id,
in_month AS dateForInMonth,
SUM(sum_in_month) AS result_CA
FROM (
-- Augmenter result_CA avec somme des product_price_ttc des order_basket__product
SELECT
shops.id AS for_shop_id,
DATE_FORMAT(order_basket__product.created_at,"%Y-%m") AS in_month,
41.00 AS sum_in_month -- ICI
FROM order_basket__product
INNER JOIN orders_baskets
ON orders_baskets.id = order_basket__product.order_basket_id
INNER JOIN orders
ON orders_baskets.order_id = orders.id
INNER JOIN shops
ON orders.shop_id = shops.id
WHERE YEAR(order_basket__product.created_at) = 2021
GROUP BY
for_shop_id,
in_month
UNION
-- Augmenter result_CA avec somme des service_price_ttc des order_basket__service
SELECT
shops.id AS for_shop_id,
DATE_FORMAT(order_basket__service.created_at,"%Y-%m") AS in_month,
40.00 AS sum_in_month -- ICI
FROM order_basket__service
INNER JOIN orders_baskets
ON orders_baskets.id = order_basket__service.order_basket_id
INNER JOIN orders
ON orders_baskets.order_id = orders.id
INNER JOIN shops
ON orders.shop_id = shops.id
WHERE YEAR(order_basket__service.created_at) = 2021
GROUP BY
for_shop_id,
in_month
) alias_ignored
GROUP BY
shop_id,
dateForInMonth
Ici : result_CA retourne bien 81.00
Ce qui veut dire, que si sum_in_month de order_basket__product et sum_in_month de order_basket__service ont la même valeur, qu’ils ne s’additionnent pas…
Avez-vous une idée SVP ?
Merci d’avance.