题解 | #某宝店铺动销率与售罄率#
某宝店铺动销率与售罄率
http://www.nowcoder.com/practice/715dd44c994f45cb871afa98f1b77538
题目:
请你统计每款的动销率(pin_rate,有销售的SKU数量/在售SKU数量)与售罄率(sell-through_rate,GMV/备货值,备货值=吊牌价*库存数),按style_id升序排序。
明确
一、动销率 Stock Keeping Unit (库存量单位)。在很多业务场景下,是计算库存进出计量,物理上不可分割的最小存货单元,表示某款商品的具体配置(规格、颜色等)。
有销售的SKU数量 / 在售SKU数量
有销售的SKU数量:售出的SKU数量总和(商品期间销售数量)
在售的SKU数量 :剩余(总库存 - 售出)库存SKU的数量总和(商品期末库存数量)
二、售罄率 GMV / 备货值(备货值 = 吊牌价 * 库存数)
GMV :所有订单的金额总和(很多场景下,下单未付款的订单金额也计算在内)
吊牌价 :商品详情页显示的价格
错误想法
select style_id,
round(100*sum(sales_num)/ (sum(inventory)-sum(sales_num)),2) as 'pin_rate(%)',
round(100*sum(sales_price)/ sum(inventory*tag_price),2) as 'sell-through_rate(%)'
from product_tb t1
join sales_tb t2
on t1.item_id=t2.item_id
group by style_id
order by style_id
错误原因
直接做连接做计算会导致有重复购买记录的商品的inventory多次计算,计算结果会变小。 要将两个表的计算分开进行。
正确做法
select style_id,
round(100*sum(num)/ (sum(inventory)-sum(num)),2) as 'pin_rate(%)',
round(100*sum(item_GMV)/ sum(inventory*tag_price),2) as 'sell-through_rate(%)'
from product_tb a
join
(select item_id,
sum(sales_num) as num,
sum(sales_price) as item_GMV
from sales_tb
group by item_id) as b
on a.item_id=b.item_id
group by style_id
order by style_id