感觉自己再次写复杂了。

思路如下:

1、搞清楚动销率与售罄率这两个指标。

我最开始没太搞清楚,看了下大佬们的代码搞清楚了这2个指标。
动销率=有销售的SKU数量/在售SKU数量

有销售的SKU数量 对应 sales_tb 表中的 sales_num

在售SKU数量 对应 product_tb 表中的 inventory - sales_num

售罄率=GMV/(吊牌价*库存数)

2、联结2个表,sales_tb 作为主表,并把每个item_id的备货值求出来

select a.*,b.style_id,b.tag_price,b.inventory,b.tag_price*b.inventory 备货值
from sales_tb a
left join product_tb b on a.item_id=b.item_id
where a.sales_date>='2021-11-01' and a.sales_date<'2021-12-01'

3、基于第一步的table c,group by c.style_id,c.item_id

求得每个item_id的 sales_num、inventory、sales_price和备货值。

其中sales_num和sales_price 直接sum

而inventory和备货值我用的avg

因为每个item_id的inventory和备货值是固定不变的

不会因为多卖出一款item_id而累加。

select  c.style_id,c.item_id
         ,sum(c.sales_num) sales_num
         ,avg(c.inventory) inventory
         ,sum(c.sales_price) sales_price
         ,avg(c.备货值) 备货值
from
(select a.*,b.style_id,b.tag_price,b.inventory,b.tag_price*b.inventory 备货值
from sales_tb a
left join product_tb b on a.item_id=b.item_id
where a.sales_date>='2021-11-01' and a.sales_date<'2021-12-01'
 ) c
group by c.style_id,c.item_id

4、基于第三步的table d,group by d.style_id, 求最后的动销率和售罄率。

select d.style_id
    ,round(sum(d.sales_num)/(sum(d.inventory)-sum(d.sales_num))*100,2) 动销率
    ,round(sum(d.sales_price)/sum(d.备货值)*100,2) 售罄率
from
(select  c.style_id,c.item_id
         ,sum(c.sales_num) sales_num
         ,avg(c.inventory) inventory
         ,sum(c.sales_price) sales_price
         ,avg(c.备货值) 备货值
from
(select a.*,b.style_id,b.tag_price,b.inventory,b.tag_price*b.inventory 备货值
from sales_tb a
left join product_tb b on a.item_id=b.item_id
where a.sales_date>='2021-11-01' and a.sales_date<'2021-12-01'
 ) c
group by c.style_id,c.item_id) d
 group by d.style_id
 order by d.style_id