Я пытаюсь сделать один запрос, чтобы получить статистические данные из базы данных.
Структура моих таблиц описана здесь:
PRODUCTS
id | price | buy_price | vendor_code | ...
ORDERS
id | shipping_method_id | ...
ORDER_ITEMS
id | order_id | product_id | quantity | ...
SHIPPING_METHODS
id | cost | ...
SUPPLIERS
id | code | ...
Я хочу получить такие данные. Словом, я делаю отчеты об общем доходе Продукта, расходах и количестве покупок в моей электронной торговле и хочу, чтобы они группировались по поставщикам. Я написал этот sql:
SELECT orders.id,
suppliers.code,
COUNT(products.id)*items.quantity buys,
SUM(products.price*items.quantity + shipping_methods.cost) sales,
SUM(products.buy_price*items.quantity) expenses
FROM `orders` orders
INNER JOIN `order_items` items ON items.order_id = orders.id
INNER JOIN `products` products ON items.product_id = products.id
INNER JOIN (SELECT DISTINCT suppliers.code FROM `suppliers`) suppliers
ON products.vendor_code LIKE CONCAT(suppliers.code, '%%')
INNER JOIN `shipping_methods` shipping_methods ON orders.shipping_method_id = shipping_methods.id
WHERE (
orders.delivery_date_to BETWEEN '2011-11-18' AND '2011-11-19'
)
GROUP BY suppliers.code, orders.id
ORDER BY buys DESC
это возвращает мне эти данные:
order_id code buys sales expenses
85 SB 4 1504 1111.32
84 VD 2 496 350.82
60 lg 2 1418 1052.31
88 SB 1 376 277.83
Когда я изменяю GROUP BY suppliers.code, orders.id
на GROUP BY suppliers.code
, он возвращает почти правильные данные, я имею в виду данные, сгруппированные по коду, но подсчет неверен. Признайте, что продажи и расходы правильные
order_id code buys sales expenses
85 SB 8 1880 1389.15
60 lg 2 1418 1052.31
84 VD 2 496 350.82
Если вы видите, что SB насчитал 8 продаж, но на самом деле их всего 5, как вы можете видеть в предыдущей таблице. Я уверен, что что-то пропустил в своем запросе, но не могу понять, как это исправить.
PS поле order_id не используется в моих дальнейших сценариях, я использую его, потому что запрос django Model.objects.raw () действительно должен иметь первичный ключ в результате, не очень понимаю, почему