SQL大神带你飞 | 24春招京东SQL真题解析-电商平台想要了解不同商品在不同月份的销售趋势
电商平台想要了解不同商品在不同月份的销售趋势
https://www.nowcoder.com/practice/a3fab87aca9347c28f406088cf601c7b
最近做了京东的24年春招题,题目如下:
题目分析
本题要求统计2024年1月至2024年6月期间,每个商品的总销量、最大月销量、最小月销量和平均月销量。
输出字段:
- product_id(商品ID)
- product_name(商品名称)
- total_sales(总销量)
- max_monthly_sales(最大月销量)
- min_monthly_sales(最小月销量)
- avg_monthly_sales(平均月销量,四舍五入到整数)
输出顺序:按商品ID升序排列。
涉及知识点:
- SQL 多表连接(JOIN)
- 子查询与分组聚合(SUM、MAX、MIN、AVG、ROUND)
- 分组统计(GROUP BY)
- 字段别名与排序(ORDER BY)
解答步骤
1. 统计每个商品每月的销量
首先在 sales_underline
表中,筛选出2024年1月至2024年6月的数据,并按商品ID和月份分组,统计每月销量。
select product_id, sum(quantity) as monthly_sales
from sales_underline
where sale_month between '2024-01' and '2024-06'
group by product_id, sale_month
2. 关联商品信息
将上一步的结果与 products_underline
表连接,获取商品名称。
from products_underline p
join (
-- 上一步的子查询
) s on p.product_id = s.product_id
3. 统计每个商品的总销量、最大月销量、最小月销量和平均月销量
对连接后的结果按商品ID和商品名称分组,分别计算:
- 总销量:
sum(s.monthly_sales)
- 最大月销量:
max(s.monthly_sales)
- 最小月销量:
min(s.monthly_sales)
- 平均月销量:
round(avg(s.monthly_sales), 0)
sum(s.monthly_sales) as total_sales,
max(s.monthly_sales) as max_monthly_sales,
min(s.monthly_sales) as min_monthly_sales,
round(avg(s.monthly_sales), 0) as avg_monthly_sales
完整代码
select p.product_id, p.product_name,
sum(s.monthly_sales) as total_sales,
max(s.monthly_sales) as max_monthly_sales,
min(s.monthly_sales) as min_monthly_sales,
round(avg(s.monthly_sales), 0) as avg_monthly_sales
from products_underline p
join (
select product_id, sum(quantity) as monthly_sales
from sales_underline
where sale_month between '2024-01' and '2024-06'
group by product_id, sale_month
) s on p.product_id = s.product_id
group by p.product_id, p.product_name
order by p.product_id
近似题目练习推荐
- 知识点:分组聚合、SQL连接、聚合函数、排序
如需更多类似题目,可在牛客网SQL练习区搜索“分组聚合”、“销量统计”等关键词进行练习。