最近做了京东的24年春招题,题目如下:

alt

题目分析

本题要求统计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练习区搜索“分组聚合”、“销量统计”等关键词进行练习。