我正在努力编写一个(对我来说!)复杂的查询,该查询将计算商品销售的总数量,并从两个单独的表中提取数据。我正在使用MySQL。
第一个表是一个简单的“ order_contents”表(在我的示例中为sale_ord_contents
),其中包含item_id和已售数量。有些项目可能是一个程序集,在这种情况下,它们的内容以及每个子组件的数量都存储在另一个表sale_ord_assembly_contents
中。在我的示例中,唯一的“组件”是水果篮。我注意到一个水果篮条目的售出数量为(2),这意味着其所有内容的数量应乘以2。
我的目标是通过两个表之间的累计销售量找到20个最常见的项目。我最苦恼的部分是如何处理将子组件的值乘以sale_ord_contents
表中父组件的数量。
我已经编写了处理sale_ord_contents
计算的查询,但是在连接sale_ord_assembly_contents
表中的数据时遇到问题...
SELECT
item_id, name, sku,
SUM(quantity) AS purchases
FROM
sale_ord_contents
GROUP BY
item_id
ORDER BY purchases DESC
LIMIT 20
我会在PHP中做得更好吗,还是在MySQL中可行?如果是这样,SQL专家可以协助我编写提供所需结果的查询吗?谢谢!
最佳答案
更新了我的答案,请重试以下内容:
SELECT
IF (soac.item_id IS NULL, soc.item_id, soac.item_id) as item_id,
IF (soac.name IS NULL, soc.name, soac.name) as name,
SUM(soc.quantity * COALESCE(soac.quantity, 1)) AS total_sold
FROM
sale_ord_contents soc
LEFT OUTER JOIN sale_ord_assembly_contents soac
ON soac.order_item_id = soc.id
GROUP BY
IF (soac.quantity IS NULL, soc.item_id, soac.item_id),
IF (soac.name IS NULL, soc.name, soac.name)
ORDER BY total_sold DESC LIMIT 20