【阿里巴巴】统计商品类别年龄组销售情况
JOIN 连接聚合函数GROUP BY窗口函数ORDER BY营收统计面试真题
题目描述
来源:阿里巴巴 SQL 面试真题
电商平台需要对商品销售情况进行分析,统计每个商品类别下不同年龄组客户的购买金额,并计算各年龄组购买量占该类别总购买量的比例。
数据表
products 商品表
| 字段 | 类型 | 说明 |
|---|---|---|
| product_id | BIGINT | 商品 ID,主键 |
| product_name | VARCHAR(100) | 商品名称 |
| category | VARCHAR(20) | 商品类别,如电子、服装、家居 |
sales 销售表
| 字段 | 类型 | 说明 |
|---|---|---|
| sale_id | BIGINT | 销售 ID,主键 |
| product_id | BIGINT | 商品 ID |
| sale_date | DATE | 销售日期 |
| quantity | INT | 销售数量 |
| price | DECIMAL(10,2) | 本次销售单价 |
customer_info 客户信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| sale_id | BIGINT | 销售 ID,关联 sales.sale_id |
| customer_id | BIGINT | 客户 ID |
| age_group | VARCHAR(20) | 年龄组:青年、中年、老年 |
| gender | VARCHAR(10) | 性别:男、女 |
统计口径
- 总销售额为
SUM(quantity * price),结果四舍五入保留 2 位小数。 - 购买量占比为该商品类别和年龄组的
SUM(quantity)除以该类别的SUM(quantity),结果为 0~1 之间的小数并保留 2 位小数。 - 题干提到“年龄组和性别”,但指定返回字段没有
gender;本题按指定的四列要求,按商品类别和年龄组汇总,性别不单独拆行。 - 结果按商品类别升序排列,年龄组升序作为同类别下的稳定排序条件。
期望输出列
| 列名 | 说明 |
|---|---|
| product_category | 商品类别 |
| age_group | 年龄组 |
| total_sales_amount | 总销售额 |
| purchase_percentage | 购买量占比 |
数据样例
| product_idPKBIGINT | product_nameVARCHAR(100) | categoryVARCHAR(20) |
|---|---|---|
| 1 | 智能手机 | 电子 |
| 2 | 运动外套 | 服装 |
| 3 | 客厅沙发 | 家居 |
| 4 | 无线耳机 | 电子 |
输入数据显示 4 / 4 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里