这一题的难点和坑主要在于对指标的理解。以及要分别计算几个指标,算完之后再关联表。

一、题目理解

题目:请你统计每款的动销率(pin_rate,有销售的SKU数量/在售SKU数量)与售罄率(sell-through_rate,GMV/备货值,备货值=吊牌价*库存数),按style_id升序排序
1)动销率=已售商品总数/剩余库存数
  • 已售商品总数:SUM(sales_tb.sales_num)
  • 剩余库存数:SUM(product_tb.inventory)-SUM(sales_tb.sales_num)
2)售罄率=GMV/吊牌价*库存数
  • GMV=SUM(sales_tb.sales_price)
  • 备货值=SUM(product_tb.tag_price*product_tb.inventory)

二、解题步骤

解题思路:首先在产品表(product_tb)中算出库存数和备货值,其次在销售表(sales_tb)中算出已售商品总数和GMV,最后关联两张表求出动销率和售罄率,按style_id升序排序即完成。
1)在产品表(product_tb)中算出库存数和备货值
ELECT style_id,SUM(inventory) inventory_cnt,SUM(tag_price*inventory) total_gmv FROM product_tb GROUP BY style_id;

2)在销售表(sales_tb)中算出已售商品总数和GMV
SELECT style_id,SUM(sales_num) sales_num_cnt, SUM(sales_price) gmv FROM sales_tb JOIN product_tb USING(item_id) GROUP BY style_id;

3)关联两张表求出动销率和售罄率,按style_id升序排序即完成
SELECT t1.style_id,ROUND(sales_num_cnt*100/(inventory_cnt-sales_num_cnt),2) 'pin_rate(%)',ROUND(gmv*100/total_gmv,2) '	sell-through_rate(%)'
FROM(SELECT style_id,SUM(inventory) inventory_cnt,SUM(tag_price*inventory) total_gmv FROM product_tb GROUP BY style_id)t1
LEFT JOIN(SELECT style_id,SUM(sales_num) sales_num_cnt, SUM(sales_price) gmv FROM sales_tb JOIN product_tb USING(item_id) GROUP BY style_id)t2 USING(style_id)
ORDER BY style_id;