【发布时间】:2020-05-19 08:52:22
【问题描述】:
我有一个简单的查询来计算过去 3 天内售出的平均产品数量。现在我必须扩展查询,以便它解耦捆绑的产品。
数据库结构(简化):
订购
- 身份证
- date_order_created_at
order_product
- product_sku
- 数量
- order_id
product_bundle
- product_sku - “子”product_sku
- bundle_sku - “父/捆绑”product_sku
- 数量 - 表示捆绑中包含的产品数量
产品
- product_sku
- 姓名
示例数据
例如,order_product 可能包含捆绑商品“护手霜 + 身体霜”,它必须显示为 2 件商品,这应该可以使用 product_bundle 表格来实现。
在需要显示捆绑销售的产品数量之前,我可以使用以下查询来显示过去 3 天的平均销售数量:
SELECT p.name
, SUM(op.quantity)/3 avg_3_days
FROM order_product op
LEFT
JOIN `order` o
ON o.id = op.order_id
LEFT
JOIN product p
ON p.sku = op.product_sku
WHERE o.date_order_created_at BETWEEN DATE(DATE_ADD(NOW(), INTERVAL -3 DAY)) AND DATE(DATE_ADD(NOW(), INTERVAL -1 DAY)))
GROUP
BY p.name
ORDER
BY avg_3_days DESC
现在我想使用来自product_bundle 的数据将捆绑包分开,并将它们显示为单个产品,包括所有非捆绑包产品。产品包可能包含 2 个或更多项目。
我已经尝试过各种 UNION 和子查询语句,但我无法理解它。 这甚至可以使用当前的数据库结构来实现吗?
【问题讨论】:
-
更新您的问题添加适当的数据样本和预期结果
-
我更喜欢避免使用保留字作为表/列标识符;眼睛会舒服一点!
-
正确,特别是“订单”。感谢您的编辑。
标签: mysql