跳到主要内容

SHEIN大数据面试SQL-不同国家/地区GMV排名

⚠️ 待修正

一、题目背景

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

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

一、题目

SHEIN作为跨境电商平台,需要按国家/地区统计GMV(销售额),并给出排名。计算2025年6月每个国家的总GMV及排名,GMV=商品单价×销售数量。

假设有订单表 shein_orders

+----------+----------+---------+--------+------------+-------------------+
| order_id | country | sku_id | price | sale_qty | order_time |
+----------+----------+---------+--------+------------+-------------------+
| 1001 | US | SKU001 | 15.00 | 2 | 2025-06-01 10:00 |
| 1002 | UK | SKU002 | 25.00 | 1 | 2025-06-02 11:00 |
| 1003 | US | SKU003 | 10.00 | 3 | 2025-06-03 09:00 |
| 1004 | JP | SKU001 | 15.00 | 1 | 2025-06-04 12:00 |
| 1005 | US | SKU002 | 25.00 | 2 | 2025-06-05 14:00 |
| 1006 | UK | SKU003 | 10.00 | 5 | 2025-06-06 10:00 |
| 1007 | FR | SKU001 | 15.00 | 1 | 2025-06-07 08:00 |
+----------+----------+---------+--------+------------+-------------------+

三、思路分析

  1. 按国家分组,计算每个国家的GMV = sum(price * sale_qty);
  2. 使用 RANK() / DENSE_RANK() 按GMV降序排名;
  3. 题目简单,核心考察聚合函数和排名窗口函数的使用。
维度评分
题目难度⭐️⭐️
题目清晰度⭐️⭐️⭐️⭐️⭐️
业务常见度⭐️⭐️⭐️⭐️⭐️

四、逐步推导

1.按国家统计GMV

执行SQL

select country,
round(sum(price * sale_qty), 2) as gmv
from shein_orders
where substr(order_time, 1, 7) = '2025-06'
group by country

查询结果

+---------+--------+
| country | gmv |
+---------+--------+
| US | 110.00 |
| UK | 75.00 |
| JP | 15.00 |
| FR | 15.00 |
+---------+--------+

2.按GMV降序排名

执行SQL

select country,
gmv,
rank() over (order by gmv desc) as rk
from (
select country,
round(sum(price * sale_qty), 2) as gmv
from shein_orders
where substr(order_time, 1, 7) = '2025-06'
group by country
) t
order by rk

查询结果

+---------+--------+-----+
| country | gmv | rk |
+---------+--------+-----+
| US | 110.00 | 1 |
| UK | 75.00 | 2 |
| JP | 15.00 | 3 |
| FR | 15.00 | 3 |
+---------+--------+-----+

五、常见坑点

坑1:RANK vs DENSE_RANK vs ROW_NUMBER — 并列值处理不同:ROW_NUMBER硬区分,RANK跳跃,DENSE_RANK连续。统计"前N名"需明确业务倾向。

坑2:NULL值排序位置 — ORDER BY 默认 NULLS LAST,如果排序列有 NULL,Top N可能被挤掉。

六、举一反三

  1. 分组Top NPARTITION BY category 实现每个品类/区域的前N名

  2. 含占比的排名SUM() OVER() 算总量,每个条目除总量得贡献度

  3. 滚动时间窗口Top N:限定过去30天数据,更适合分析趋势变化

七、知识点总结

考点说明
RANK / DENSE_RANK / ROW_NUMBER排名函数三剑客,并列处理方式不同
GROUP BY + 聚合函数分组聚合是数据分析的基础,配合HAVING筛选分组结果

八、建表语句和数据插入

点击展开 DDL & DML
--建表语句
CREATE TABLE shein_orders (
order_id bigint COMMENT '订单ID',
country string COMMENT '国家/地区',
sku_id string COMMENT 'SKU编码',
price decimal(10,2) COMMENT '商品单价',
sale_qty int COMMENT '销售数量',
order_time string COMMENT '下单时间'
) COMMENT 'SHEIN订单表';

-- 插入数据
insert into shein_orders(order_id, country, sku_id, price, sale_qty, order_time) values
(1001, 'US', 'SKU001', 15.00, 2, '2025-06-01 10:00'),
(1002, 'UK', 'SKU002', 25.00, 1, '2025-06-02 11:00'),
(1003, 'US', 'SKU003', 10.00, 3, '2025-06-03 09:00'),
(1004, 'JP', 'SKU001', 15.00, 1, '2025-06-04 12:00'),
(1005, 'US', 'SKU002', 25.00, 2, '2025-06-05 14:00'),
(1006, 'UK', 'SKU003', 10.00, 5, '2025-06-06 10:00'),
(1007, 'FR', 'SKU001', 15.00, 1, '2025-06-07 08:00');
📱关注公众号

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

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

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

交流微信二维码

你可能还想看