【阿里巴巴】统计 2023 年产品销售情况
JOIN 连接聚合函数GROUP BY子查询窗口函数CASE WHEN日期函数ORDER BY用户行为分析营收统计面试真题
题目描述
来源:阿里巴巴 SQL 面试真题
为了制定新的产品营销方案,某电商平台需要统计 2023 年每个产品的销售额、销量、月度表现和核心购买客户年龄段。
数据表
customers 顾客表
| 字段 | 类型 | 说明 |
|---|---|---|
| customer_id | BIGINT | 顾客 ID,主键 |
| customer_name | VARCHAR(50) | 顾客姓名 |
| customer_email | VARCHAR(50) | 顾客邮箱 |
| customer_age | INT | 顾客年龄 |
products 产品表
| 字段 | 类型 | 说明 |
|---|---|---|
| product_id | BIGINT | 产品 ID,主键 |
| product_name | VARCHAR(50) | 产品名称 |
| unit_price | DECIMAL(10,2) | 产品单价 |
orders 订单表
| 字段 | 类型 | 说明 |
|---|---|---|
| order_id | BIGINT | 订单 ID,主键 |
| customer_id | BIGINT | 顾客 ID |
| product_id | BIGINT | 产品 ID |
| quantity | INT | 购买数量 |
| order_date | DATE | 订单日期 |
统计口径
- 只统计 2023-01-01 至 2023-12-31 的订单。
- 每个产品都要输出;2023 年没有订单的产品,金额和数量指标记为 0,客户年龄段记为 NULL。
- 总销售额 = 2023 年总销量 × 产品单价。
- 月平均销售额 = 总销售额 / 12,而不是只除以有销量的月份数。
- 单月最高销量为该产品 2023 年各自然月销量之和的最大值。
- 购买量最多的客户年龄段:先汇总每位客户对该产品的全年购买量,取购买量最大的客户,再映射其年龄段。
- 多位客户年购买量相同时,取年龄更小的客户;年龄仍相同时,取
customer_id更小的客户。
年龄段划分:1-10、11-20、21-30、31-40、41-50、51-60、61+。
题目要求
- 金额指标四舍五入保留 2 位小数。
- 按总销售额降序排列。
- 总销售额相同时,按产品 ID 升序排列。
期望输出列
| 列名 | 说明 |
|---|---|
| product_id | 产品 ID |
| total_sales | 2023 年总销售额 |
| unit_price | 产品单价 |
| total_quantity | 2023 年总销量 |
| avg_monthly_sales | 月平均销售额 |
| max_monthly_quantity | 单月最高销量 |
| customer_age_group | 年购买量最多客户的年龄段 |
数据样例
| customer_idPKBIGINT | customer_nameVARCHAR(50) | customer_emailVARCHAR(50) | customer_ageINT |
|---|---|---|---|
| 101 | Alice | alice@example.com | 25 |
| 102 | Bob | bob@example.com | 35 |
| 103 | Carol | carol@example.com | 19 |
| 104 | David | david@example.com | 45 |
| 105 | Eve | eve@example.com | 62 |
输入数据显示 5 / 5 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里