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

题目分析

本题要求统计每种运输方式在不同目的城市的平均运输时长和总运输成本。
输出字段

  • destination_city(目的城市)
  • transport_name(运输方式名称)
  • average_transport_duration(平均运输时长,保留两位小数)
  • total_transport_cost(总运输成本)

输出顺序

  • 先按目的城市升序(destination_city)
  • 再按运输方式名称升序(transport_name)

涉及知识点

  • SQL 多表连接(JOIN)
  • 分组聚合(SUM、COUNT、ROUND、GROUP BY)
  • 日期差计算(DATEDIFF)
  • 字段别名与排序(ORDER BY)

解答步骤

1. 关联运输方式、订单和成本数据

  • transport_detail 运输方式表与 order_info 订单表通过运输ID(transport_id)连接,获取每笔订单的运输方式和目的城市。
  • 再与 cost_data 成本表通过订单ID连接,获取每笔订单的运输成本。
from transport_detail t
join order_info o on o.transport_id = t.transport_id
join cost_data c on c.order_id = o.order_id

2. 分组统计每种运输方式在每个目的城市的平均运输时长和总运输成本

  • 按运输方式名称和目的城市分组。
  • 平均运输时长:round(sum(datediff(o.delivery_date, o.order_date))/count(*), 2)
    • datediff 计算每笔订单的运输天数,求和后除以订单数,最后用 round 保留两位小数。
  • 总运输成本:sum(c.total_cost)
group by transport_name, destination_city

3. 排序输出

  • 按目的城市和运输方式名称升序排序。
order by destination_city, transport_name

完整代码

select o.destination_city, t.transport_name,
round(sum(datediff(o.delivery_date, o.order_date))/count(*), 2) as average_transport_duration,
sum(c.total_cost) as total_transport_cost
from transport_detail t
join order_info o on o.transport_id = t.transport_id
join cost_data c on c.order_id = o.order_id
group by transport_name, destination_city
order by destination_city, transport_name

近似题目练习推荐

计算用户的平均次日留存率

  • 知识点:日期计算

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