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

题目分析

本题要求统计2023年每个商品的总利润和利润率。
输出字段

  • product_id(商品ID)
  • total_profit(总利润)
  • profit_margin(利润率,保留两位小数,以百分比形式显示)

输出顺序:按商品ID升序(order by s.product_id)。
涉及知识点

  • SQL 多表连接(JOIN)
  • 条件筛选(WHERE + year())
  • 分组聚合(SUM、AVG、GROUP BY)
  • 字段别名与排序(ORDER BY)
  • 算术运算与ROUND

解答步骤

1. 关联销售订单与采购价格

  • sales_orders 销售订单表与 purchase_prices 采购价格表通过商品ID连接,获取每笔销售对应的采购价格。
from sales_orders s
join purchase_prices p on s.product_id = p.product_id

2. 筛选2023年的销售数据

  • 只保留2023年内的销售记录。
where year(order_date) = 2023

3. 按商品分组统计总利润和利润率

  • 按商品ID分组,计算:
    • 总利润:sum((s.unit_price-p.purchase_price)*s.quantity)
      • 单件利润 = 销售单价 - 采购价格
      • 总利润 = 单件利润 × 销售数量
    • 利润率:round(avg((s.unit_price-p.purchase_price)/p.purchase_price)*100,2)
      • 单件利润率 = (销售单价 - 采购价格) / 采购价格
      • 平均利润率 = 所有单件利润率的平均值 × 100,保留两位小数
group by s.product_id

4. 排序输出

  • 按商品ID升序排序。
order by s.product_id

完整代码

select p.product_id,
sum((s.unit_price-p.purchase_price)*s.quantity) as total_profit,
round(avg((s.unit_price-p.purchase_price)/p.purchase_price)*100,2) as profit_margin 
from sales_orders s
join purchase_prices p on s.product_id = p.product_id
where year(order_date) = 2023
group by s.product_id
order by s.product_id

近似题目练习推荐

最受欢迎的top3课程

  • 知识点:SQL连接、时间差计算、分组、聚合函数、排序、限制输出

物流公司想要分析快递小哥的薪资构成和绩效情况

  • 知识点:SQL连接、时间计算、分组、聚合函数、排序

如需更多类似题目,可在牛客网SQL练习区进行练习。