【阿里巴巴】统计门店近 7 天畅销 SKU Top 3
JOIN 连接聚合函数窗口函数CASE WHEN日期函数用户行为分析面试真题
题目描述
来源:阿里巴巴 SQL 面试真题
某连锁门店需要在每晚库存快照日快速评估近 7 天销量与库存覆盖天数,并挑出每家门店近 7 天最畅销的 Top 3 SKU,为门店补货提供依据。
数据表
store_info_ 门店主数据表
| 字段 | 类型 | 说明 |
|---|---|---|
| store_id | INT | 门店编号,主键 |
| store_name | VARCHAR(64) | 门店名称 |
| city | VARCHAR(32) | 所在城市 |
store_stock_ 库存快照表
| 字段 | 类型 | 说明 |
|---|---|---|
| store_id | INT | 门店编号 |
| sku_id | VARCHAR(32) | 商品 SKU 编号 |
| stock_qty | INT | 快照库存,非负 |
| snapshot_date | DATE | 库存快照日期 |
同一门店、同一 SKU、同一天只有一条库存快照。
sales_daily_ 门店商品日销量表
| 字段 | 类型 | 说明 |
|---|---|---|
| store_id | INT | 门店编号 |
| sku_id | VARCHAR(32) | 商品 SKU 编号 |
| sale_date | DATE | 销售日期 |
| qty | INT | 当日销量,非负 |
题目要求
以 store_stock_ 中最新库存快照日期作为基准日,统计基准日前 6 天至基准日共 7 个自然日的销量。针对快照日存在库存记录的 SKU,在每家门店内取销量排名前 3 的商品。
输出字段:
store_id、store_name、city、sku_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_idPKINT | store_nameVARCHAR(64) | cityVARCHAR(32) |
|---|---|---|
| 1 | Shanghai Central | Shanghai |
| 2 | Hangzhou West | Hangzhou |
输入数据显示 2 / 2 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里