在多对多关系查询中保持实体的独特性

时间:2019-03-20 12:56:11

标签: mysql sql many-to-many

我在数据库中有3个实体:

  • 产品

    • id
    • 名称
    • sku
  • 类别

    • id
    • 名称
  • 订单项

    • id
    • product_id
    • line_total
    • 销售日期

产品与类别(具有category_product枢纽)具有多对多关系,并且产品与订单项(产品-

产品可以具有多个类别,例如,男装>鞋类和女装>鞋类等都可以包括鞋子,但是当将类别名称分组时,所有“鞋子”类别都将分组在一起。

我遇到的问题是,如果产品属于多个类别,则为计算每个类别的销售额而进行的查询包括重复的销售额:

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

例如,如果以男士和女士皮鞋同时销售产品的价格为15.99,则将被计为31.98。

我可以测试一行包含的次数:

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

我想知道的ID是如何限制集合中的订单项(SUM())以获得类别的准确销售数字

0 个答案:

没有答案
相关问题