题解 | #某宝店铺动销率与售罄率#

某宝店铺动销率与售罄率

https://www.nowcoder.com/practice/715dd44c994f45cb871afa98f1b77538

# 求每款的动销率、售罄率
# 动销率:有销售的SKU数量/在售的数量 
# 售罄率:GMV/(总共价值)

# 联结两张表,有销售的SKU数量也就是 sales_num 的求和,在售的数量也就是 inventory - 对应商品的售出数量 的求和
# GMV也就是 总商品交易额,是 sales_price 的求和,备货值是 tag_price * inventory- 对应商品的售出数量 的求和 # 错误理解

# 分别从两张表提取所需的字段

# 临时表0,联结两张表,因为是计算各个商品的细节,所以直接对标价、库存取最大值降维,对售出数和金额取总和,这样就知道一个商品的标价、初始库存、售出数、售出总金额
WITH temp_0 AS(
    SELECT style_id, item_id, MAX(tag_price) tag_price, MAX(inventory) inventory, SUM(sales_num) sales_num, SUM(sales_price) sales_price
    FROM product_tb
    JOIN sales_tb USING(item_id)
    GROUP BY style_id, item_id
    ORDER BY style_id, item_id
    )

# 主查询根据公式求。难点在于理解两个率。
# 动销率:有销售的SKU数量/在售的数量 。在售数量是指初始库存减去已售出数
# 售罄率:GMV/(总共价值)。GMV也就是售出总金额,总共备货价值是指初始库存*各自的吊牌价
SELECT style_id,
    #sales_num, inventory - sales_num inventory_now,  sales_price gmv, tag_price * inventory total_price
    ROUND(SUM(sales_num) / SUM(inventory - sales_num) * 100, 2) 'pin_rate(%)', ROUND(SUM(sales_price) / SUM(tag_price * inventory) * 100, 2) 'sell-through_rate(%)'
FROM temp_0
GROUP BY style_id
ORDER BY style_id

踩的坑:

1.最开始以为在售数量是指初始库存数,但是不是。

2.备货值的理解错误,备货值是初始的库存*标价

要注意的是,如果直接求总和,比如对inventory求总和,会导致某一商品的库存数翻倍,这就论证了临时表0的必要性。可以把刚联结后的库存看作是开窗函数后的结果。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务