跳到主要内容

SHEIN大数据面试SQL-上新商品的首周销量统计

⚠️ 待修正

一、题目背景

这道题来自SHEIN的数据分析岗面试。SHEIN是快时尚跨境电商,数据分析师需要从海量业务数据中挖掘洞见。

业务场景:用户消费行为相关需求在日常工作中频繁出现,这类型的SQL题是面试高频考点。

一、题目

SHEIN每天都有大量新品上架,需要统计每个上新商品在上架后首周(7天内)的累计销量,评估新品的市场表现。

假设有两张表:

  • product_launch:商品上架时间表
  • order_detail:订单明细表
-- product_launch 商品上架表
+---------+-------------------+
| sku_id | launch_time |
+---------+-------------------+
| SKU001 | 2025-06-01 08:00 |
| SKU002 | 2025-06-03 10:00 |
| SKU003 | 2025-06-05 09:00 |
+---------+-------------------+

-- order_detail 订单明细表
+----------+---------+--------+-------------------+
| order_id | sku_id | qty | order_time |
+----------+---------+--------+-------------------+
| 1001 | SKU001 | 2 | 2025-06-02 10:00 |
| 1002 | SKU001 | 1 | 2025-06-05 14:00 |
| 1003 | SKU001 | 3 | 2025-06-09 09:00 |
| 1004 | SKU002 | 2 | 2025-06-04 10:00 |
| 1005 | SKU002 | 1 | 2025-06-08 16:00 |
| 1006 | SKU002 | 5 | 2025-06-12 11:00 |
| 1007 | SKU003 | 1 | 2025-06-06 08:00 |
| 1008 | SKU003 | 1 | 2025-06-14 12:00 |
+----------+---------+--------+-------------------+

三、思路分析

  1. JOIN 两表,筛选订单时间在上架后7天内的记录:datediff(order_time, launch_time) between 0 and 6
  2. 按SKU分组汇总首周销量;
  3. 注意保留那些首周0销量的新品(使用 LEFT JOIN)。
维度评分
题目难度⭐️⭐️⭐️
题目清晰度⭐️⭐️⭐️⭐️⭐️
业务常见度⭐️⭐️⭐️⭐️⭐️

四、逐步推导

1.筛选首周内的订单

执行SQL

select l.sku_id,
l.launch_time,
o.order_id,
o.qty,
o.order_time,
datediff(o.order_time, l.launch_time) as days_from_launch
from product_launch l
left join order_detail o
on l.sku_id = o.sku_id
and datediff(o.order_time, l.launch_time) between 0 and 6

查询结果

+---------+-------------------+----------+------+-------------------+------------------+
| sku_id | launch_time | order_id | qty | order_time | days_from_launch |
+---------+-------------------+----------+------+-------------------+------------------+
| SKU001 | 2025-06-01 08:00 | 1001 | 2 | 2025-06-02 10:00 | 1 |
| SKU001 | 2025-06-01 08:00 | 1002 | 1 | 2025-06-05 14:00 | 4 |
| SKU002 | 2025-06-03 10:00 | 1004 | 2 | 2025-06-04 10:00 | 1 |
| SKU002 | 2025-06-03 10:00 | 1005 | 1 | 2025-06-08 16:00 | 5 |
| SKU003 | 2025-06-05 09:00 | 1007 | 1 | 2025-06-06 08:00 | 0 |
+---------+-------------------+----------+------+-------------------+------------------+

2.汇总每个SKU的首周销量

执行SQL

select l.sku_id,
l.launch_time,
coalesce(sum(o.qty), 0) as first_week_sales
from product_launch l
left join order_detail o
on l.sku_id = o.sku_id
and datediff(o.order_time, l.launch_time) between 0 and 6
group by l.sku_id, l.launch_time

查询结果

+---------+-------------------+------------------+
| sku_id | launch_time | first_week_sales |
+---------+-------------------+------------------+
| SKU001 | 2025-06-01 08:00 | 3 |
| SKU002 | 2025-06-03 10:00 | 3 |
| SKU003 | 2025-06-05 09:00 | 1 |
+---------+-------------------+------------------+

五、常见坑点

坑1:CASE WHEN条件的顺序 — 从上到下匹配,先命中先生效。写区间时从低到高或从高到低,避免条件重叠。

坑2:占比计算的分母SUM() OVER() 不带 PARTITION BY 才是全局总量,加了PARTITION BY分母变成组内总量。

六、举一反三

  1. 动态分段:阈值存在配置表中用JOIN取值,灵活调整分段策略

  2. 累计分布CDFSUM(cnt) OVER (ORDER BY bucket) 算累计占比,画帕累托图

  3. 按时间维度对比:按天/周/月分区,观察分布的时序变化

七、知识点总结

考点说明
多表JOINLEFT JOIN保留主表所有数据,COALESCE处理NULL
GROUP BY + 聚合函数分组聚合是数据分析的基础,配合HAVING筛选分组结果
日期函数DATEDIFF / DATE_ADD / unix_timestamp处理日期运算
NULL值处理NULL在聚合和窗口函数中的差异,COALESCE/NVL的替代方案

八、建表语句和数据插入

点击展开 DDL & DML
--建表语句
CREATE TABLE product_launch (
sku_id string COMMENT 'SKU编码',
launch_time string COMMENT '上架时间'
) COMMENT '商品上架时间表';

CREATE TABLE order_detail (
order_id bigint COMMENT '订单ID',
sku_id string COMMENT 'SKU编码',
qty int COMMENT '购买数量',
order_time string COMMENT '下单时间'
) COMMENT '订单明细表';

-- 插入数据
insert into product_launch(sku_id, launch_time) values
('SKU001', '2025-06-01 08:00'),
('SKU002', '2025-06-03 10:00'),
('SKU003', '2025-06-05 09:00');

insert into order_detail(order_id, sku_id, qty, order_time) values
(1001, 'SKU001', 2, '2025-06-02 10:00'),
(1002, 'SKU001', 1, '2025-06-05 14:00'),
(1003, 'SKU001', 3, '2025-06-09 09:00'),
(1004, 'SKU002', 2, '2025-06-04 10:00'),
(1005, 'SKU002', 1, '2025-06-08 16:00'),
(1006, 'SKU002', 5, '2025-06-12 11:00'),
(1007, 'SKU003', 1, '2025-06-06 08:00'),
(1008, 'SKU003', 1, '2025-06-14 12:00');
📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看