MySQL:基于成本比例的子行值?
我们有一个packslip lines表格,其结构如下(简化):MySQL:基于成本比例的子行值?,mysql,sql,Mysql,Sql,我们有一个packslip lines表格,其结构如下(简化): 行\u id(packslip行的唯一id) sku(项目#) 名字 重量 价值(项目的价值/价格) 成本 是套件(这是套件/父项吗?) 父项\u行\u id(如果是子项,将包含父项的行\u id) packslip线可以表示单个产品、父套件或套件组件。对于本练习,请使用以下数据集: 1, 'ITEM1', 'Item # 1', 0.3, 9.99, 4.79, 0, null 2, 'KIT1', 'Kit # 1', 1
- 行\u id(packslip行的唯一id)
- sku(项目#)
- 名字
- 重量
- 价值(项目的价值/价格)
- 成本
- 是套件(这是套件/父项吗?)
- 父项\u行\u id(如果是子项,将包含父项的行\u id)
1, 'ITEM1', 'Item # 1', 0.3, 9.99, 4.79, 0, null
2, 'KIT1', 'Kit # 1', 1.3, 29.99, 0, 1, null
3, 'KITITEM1', 'Kit Item # 1', 0.7, 0, 10.0, 0, 2
4, 'KITITEM2', 'Kit Item # 2', 0.3, 0, 2.49, 0, 2
5, 'KITITEM3', 'Kit Item # 3', 0.3, 0, 4.29, 0, 2
正如您希望看到的,ITEM1
是一种常规/单独的产品,KIT1
是一种父套件,最后3项是KIT1
的子组件
请注意,套件缺少成本,套件项缺少价值。我需要创建一个查询,根据项目成本占工具包总成本的比例来计算工具包项目值
所以在这个例子中:
KITITEM1
Value=10/(10.0+2.49+4.29)*29.99
=$17.87
KITITEM2
Value=2.49/(10.0+2.49+4.29)*29.99
=4.45美元
kitime3
Value=4.29/(10.0+2.49+4.29)*29.99
=<7.67美元
我可以在一个查询中完成这一点吗(可以有嵌套查询)?如何查询?尝试此查询
查询与一个派生表左连接,该派生表将(父项的值)除以该父项的总和(成本)组。然后外部查询检查父行id是否为空,并将成本乘以派生表中的值。做得好!我还了解了另一个我不知道存在的工具(SQLFIDLE),这给了我所需要的。非常感谢。
SELECT T1.line_id,
T1.sku,
T1.name,
T1.weight,
IF (T1.parent_line_id IS NULL,T1.value,
ROUND(T1.cost * T2.value_divided_by_total_cost,2))as value,
T1.cost,
T1.is_kit,
T1.parent_line_id
FROM packslip T1
LEFT JOIN
(SELECT parent_line_id,(SELECT value FROM
packslip p2 WHERE p1.parent_line_id = p2.line_id)
/SUM(cost)
as value_divided_by_total_cost
FROM packslip p1
WHERE parent_line_id IS NOT NULL
GROUP BY parent_line_id
)T2
ON T1.parent_line_id = T2.parent_line_id