我有两张桌子,sales_order和sales_order_line。
sales_order_line表包含事务级事务的详细信息,sales_order表包含事务级别的详细信息。我加入了这两个表,并意识到折扣值处于事务级别。当顾客购买超过1件商品时,我需要根据商品价格来分配折扣的价值,而当客户只购买1件商品时,折扣值只是按原样应用。桌子看起来像这样。
sales_order
ID | PLATFORM_ORDER_CODE | OMS_ORDER_CODE | DISCOUNT_TOTAL
0001 19000001 nebula0001 300000
0002 19000001 nebula0002 300000
0003 19000001 nebula0003 300000
0004 19000002 nebula0004 100000
0005 19000002 nebula0005 100000
0006 19000003 nebula0006 50000sales_order_line
SALES_ORDER_ID | PLATFORM_ORDER_CODE | SKU_CODE | UNIT_PRICE
0001 19000001 SKUA0001 200000
0002 19000001 SKUA0002 100000
0003 19000001 SKUA0003 300000
0004 19000002 SKUA0001 200000
0005 19000002 SKUA0002 100000
0006 19000003 SKUA0001 200000这是我在DB Fiddle上的尝试,我需要这样的结果
PLATFORM_ORDER_CODE | OMS_ORDER_CODE | SKU_CODE | UNIT_PRICE | DISCOUNT
19000001 nebula0001 SKUA0001 200000 100000
19000001 nebula0002 SKUA0002 100000 50000
19000001 nebula0003 SKUA0003 300000 150000
19000002 nebula0004 SKUA0001 200000 66666.6666
19000002 nebula0005 SKUA0002 100000 33333.3333
19000003 nebula0006 SKUA0001 200000 50000发布于 2020-02-19 09:50:57
SELECT B.PLATFORM_ORDER_CODE,
A.OMS_ORDER_CODE,
B.SKU_CODE,
B.UNIT_PRICE,
A.DISCOUNT_TOTAL/C.TOTAL_PRICE*B.UNIT_PRICE DISCOUNT
FROM t_td_sales_order A
JOIN t_td_sales_order_line B ON B.SALES_ORDER_ID = A.ID
JOIN ( SELECT PLATFORM_ORDER_CODE, SUM(UNIT_PRICE) TOTAL_PRICE
FROM t_td_sales_order_line
GROUP BY PLATFORM_ORDER_CODE ) C ON B.PLATFORM_ORDER_CODE = C.PLATFORM_ORDER_CODE发布于 2020-02-19 09:53:31
如果您运行的是MySQL 8.0,您可以使用窗口函数:
select
o.platform_order_code,
o.oms_order_code,
l.sku_code,
l.unit_price,
o.discount_total
* l.unit_price
/ sum(l.unit_price) over(partition by o.platform_order_code) discount
from sales_order o
inner join sales_order_line l on l.sales_order_id = o.id计算订单行折扣的逻辑是计算当前订单行unit_price与当前platform_order_code总价格的比率,然后将其应用于订单折扣。
https://stackoverflow.com/questions/60297149
复制相似问题