最近做了京东的24年春招题,题目如下:
题目分析
表结构
-
orders 表
order_id
:订单编号customer_id
:客户编号order_date
:订单日期
-
customers 表
customer_id
:客户编号customer_name
:客户名称
目标
从 orders
表中获取每个客户的最新订单信息,并显示订单编号、客户名称和订单日期。
输出要求
按客户名称升序排列输出结果。
知识点关键词
- SQL 连接(JOIN)
- 子查询
- 分组(GROUP BY)
- 排序(ORDER BY)
解答步骤
步骤1:连接表
首先,我们需要连接 orders
和 customers
表,以便获取每个订单的客户名称。
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
近似题目练习推荐
- 知识点:分组、聚合函数、子查询
- 知识点:分组、排序、窗口函数