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

题目分析

表结构

  1. orders 表

    • order_id:订单编号
    • customer_id:客户编号
    • order_date:订单日期
  2. customers 表

    • customer_id:客户编号
    • customer_name:客户名称

目标

orders 表中获取每个客户的最新订单信息,并显示订单编号、客户名称和订单日期。

输出要求

按客户名称升序排列输出结果。

知识点关键词

  • SQL 连接(JOIN)
  • 子查询
  • 分组(GROUP BY)
  • 排序(ORDER BY)

解答步骤

步骤1:连接表

首先,我们需要连接 orderscustomers 表,以便获取每个订单的客户名称。

select o.order_id, c.customer_name, o.order_date
from orders o
join customers c on o.customer_id = c.customer_id

步骤2:获取每个客户的最新订单

使用子查询来获取每个客户的最新订单编号。

where (o.customer_id, o.order_id) in (
    select customer_id, max(order_id)
    from orders
    group by customer_id
)
  • 解释:子查询按 customer_id 分组,并获取每组的最大 order_id,即最新订单。

步骤3:排序结果

按客户名称升序排列最终结果。

order by c.customer_name asc

解题完整代码

select o.order_id, c.customer_name, o.order_date
from orders o
join customers c on o.customer_id = c.customer_id
where (o.customer_id, o.order_id) in (
    select customer_id, max(order_id)
    from orders
    group by customer_id
)
order by c.customer_name asc

近似题目练习推荐

未下单用户登陆渠道统计

  • 知识点:分组、聚合函数、子查询

每个顾客购买的最新产品名称

  • 知识点:分组、排序、窗口函数