最近做了携程的25年春招题,题目如下:

alt alt

题目分析

本题要求统计2024年旅行总费用超过10000元的客户信息,包括客户姓名、总旅行费用、订单数量和平均订单价格。
输出字段

  • customer_name(客户姓名)
  • total_travel_cost(总旅行费用)
  • order_count(订单数量)
  • avg_order_price(平均订单价格,保留两位小数)

输出顺序:按总旅行费用降序(total_travel_cost desc)。
涉及知识点

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

解答步骤

1. 关联预订、套餐和客户信息

  • bookings 预订表与 packages 套餐表通过套餐ID连接,获取套餐价格。
  • 再与 customers 客户表通过客户ID连接,获取客户姓名。
from bookings b
join packages p on p.id = b.package_id 
join customers c on c.id = b.customer_id

2. 筛选2024年的预订记录

  • 只保留2024年内的预订记录。
where year(b.booking_date) = 2024

3. 按客户分组统计

  • 按客户姓名分组,统计:
    • 总旅行费用:sum(p.price)
    • 订单数量:count(*)
    • 平均订单价格:round(avg(p.price),2)
group by c.name

4. 筛选总费用超过10000元的客户

  • 只保留总旅行费用大于10000元的客户。
having sum(p.price) > 10000

5. 排序输出

  • 按总旅行费用降序排序。
order by total_travel_cost desc

完整代码

select c.name as customer_name,
sum(p.price) as total_travel_cost,
count(*) as order_count,
round(avg(p.price),2) as avg_order_price
from bookings b
join packages p on p.id = b.package_id 
join customers c on c.id = b.customer_id
where year(b.booking_date) = 2024
group by c.name
having sum(p.price) > 10000
order by total_travel_cost desc

近似题目练习推荐

查询出每个运输方式在不同城市的平均运输时长以及总运输费用

  • 知识点:多表连接、分组聚合

评估2023年不同品牌商品的销售趋势和客户满意度

  • 知识点:分组统计、聚合函数、条件筛选

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