SQL 刷题/【阿里巴巴】统计门店近 7 天畅销 SKU Top 3
上一题下一题困难通过率 0%

【阿里巴巴】统计门店近 7 天畅销 SKU Top 3

JOIN 连接聚合函数窗口函数CASE WHEN日期函数用户行为分析面试真题

题目描述

来源:阿里巴巴 SQL 面试真题

某连锁门店需要在每晚库存快照日快速评估近 7 天销量与库存覆盖天数,并挑出每家门店近 7 天最畅销的 Top 3 SKU,为门店补货提供依据。

数据表

store_info_ 门店主数据表

字段类型说明
store_idINT门店编号,主键
store_nameVARCHAR(64)门店名称
cityVARCHAR(32)所在城市

store_stock_ 库存快照表

字段类型说明
store_idINT门店编号
sku_idVARCHAR(32)商品 SKU 编号
stock_qtyINT快照库存,非负
snapshot_dateDATE库存快照日期

同一门店、同一 SKU、同一天只有一条库存快照。

sales_daily_ 门店商品日销量表

字段类型说明
store_idINT门店编号
sku_idVARCHAR(32)商品 SKU 编号
sale_dateDATE销售日期
qtyINT当日销量,非负

题目要求

以 store_stock_ 中最新库存快照日期作为基准日,统计基准日前 6 天至基准日共 7 个自然日的销量。针对快照日存在库存记录的 SKU,在每家门店内取销量排名前 3 的商品。

输出字段:

  • store_idstore_namecitysku_id
  • last7d_qty:近 7 天销量之和,无销量时为 0。
  • avg_daily_qty:last7d_qty / 7,四舍五入保留 2 位小数。
  • stock_qty:基准日库存。
  • coverage_days:avg_daily_qty > 0 时为 stock_qty / avg_daily_qty,四舍五入保留 1 位小数;否则为 NULL。
  • rank_in_store:门店内按 last7d_qty 降序、sku_id 升序使用 ROW_NUMBER() 排名。

只保留 rank_in_store <= 3 的记录。近 7 天无销量的 SKU 也需要以 last7d_qty = 0 参与排名。为保证结果稳定,最终按 store_id、rank_in_store 升序输出。

数据样例

当前运行环境
store_idPKINTstore_nameVARCHAR(64)cityVARCHAR(32)
1Shanghai CentralShanghai
2Hangzhou WestHangzhou
输入数据显示 2 / 2
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

运行你的 SQL 查询后,结果将显示在这里