我在数据库中有3个实体:
产品
类别
订单项
产品与类别(具有category_product枢纽)具有多对多关系,并且产品与订单项(产品- 产品可以具有多个类别,例如,男装>鞋类和女装>鞋类等都可以包括鞋子,但是当将类别名称分组时,所有“鞋子”类别都将分组在一起。 我遇到的问题是,如果产品属于多个类别,则为计算每个类别的销售额而进行的查询包括重复的销售额: 例如,如果以男士和女士皮鞋同时销售产品的价格为15.99,则将被计为31.98。 我可以测试一行包含的次数: 我想知道的ID是如何限制集合中的订单项(SUM())以获得类别的准确销售数字SELECT c.name,SUM(oi.line_total) AS total
FROM products p
INNER JOIN category_product cp
ON p.id = cp.product_id
INNER JOIN categories c
ON c.id = cp.category_id
LEFT JOIN orderitems oi
ON oi.product_id = p.id
WHERE oi.sale_date BETWEEN '2018-11-19 00:00:00' AND '2018-11-25 23:59:59'
GROUP BY c.name
SELECT oi.id ,count(oi.id) AS count
FROM products p
INNER JOIN category_product cp
ON p.id = cp.product_id
INNER JOIN categories c
ON c.id = cp.category_id
LEFT JOIN orderitems oi
ON oi.product_id = p.id
WHERE oi.sale_date BETWEEN '2018-11-19 00:00:00' AND '2018-11-25 23:59:59'
GROUP BY oi.id