【阿里巴巴】查询各类别高利润商品销售 Top3
WHERE 条件JOIN 连接窗口函数CASE WHENORDER BY营收统计排行榜面试真题
题目描述
来源:阿里巴巴 SQL 面试真题
电商平台需要评估商品的销售绩效和利润贡献,请找出各商品类别中利润率超过 20% 且销售金额排名前三的商品。
数据表
product_category 商品类别表
| 字段 | 类型 | 说明 |
|---|---|---|
| product_id | INT | 商品 ID,主键 |
| category_id | INT | 商品所属类别 ID |
| product_name | VARCHAR(100) | 商品名称 |
sales_and_profit 销售与利润表
| 字段 | 类型 | 说明 |
|---|---|---|
| product_id | INT | 商品 ID |
| sales_amount | DECIMAL(10,2) | 销售金额 |
| cost_amount | DECIMAL(10,2) | 成本金额 |
统计口径
- 利润率 = (sales_amount - cost_amount) / sales_amount。
- 只保留销售金额大于 0 且利润率严格大于 20% 的商品。
- 在每个 category_id 内,对符合利润率条件的商品按 sales_amount 降序、product_id 升序编号,取前 3 名。
- 结果按 category_id 升序、sales_amount 降序、product_id 升序排列。
- 销售金额相同的商品按 product_id 升序决定先后,因此每个类别最多返回 3 条。
期望输出列
| 列名 | 说明 |
|---|---|
| product_id | 商品 ID |
| product_name | 商品名称 |
| category_id | 类别 ID |
| sales_amount | 销售金额 |
| profit_rate | 利润率 |
数据样例
| product_idPKINT | category_idINT | product_nameVARCHAR(100) |
|---|---|---|
| 1 | 10 | 电子商品A |
| 2 | 10 | 电子商品B |
| 3 | 10 | 电子商品C |
| 4 | 10 | 电子商品D |
| 5 | 20 | 服装商品A |
| 6 | 20 | 服装商品B |
| 7 | 20 | 服装商品C |
| 8 | 20 | 服装商品D |
输入数据显示 8 / 9 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里