如何解决 LeetCode 586
发布: (2026年1月15日 GMT+8 11:25)
2 min read
原文: Dev.to
Source: Dev.to
问题概述
任务是找出下单数量最多的客户编号。Orders 表包含两个标识列:order_number 和 customer_number。测试用例保证恰好有一个客户拥有最多的订单,但后续问题会询问如何处理并列的情况。
解决思路
- 按客户聚合订单 – 使用
COUNT()并配合GROUP BY customer_number计算每个客户的订单数量。 - 对聚合结果进行排名 – 使用窗口函数
RANK(),按订单数量降序排列。这样会把最高数量的客户(包括并列的)都赋予排名 1。 - 选择排名最高的客户 – 在结果集中筛选出
rank = 1的行,返回对应的customer_number。
使用公共表表达式(CTE)可以让步骤更模块化、易读。
SQL 解决方案(PostgreSQL)
WITH customer_order_count AS (
SELECT customer_number,
COUNT(order_number) AS order_count
FROM Orders
GROUP BY customer_number
),
customer_order_rank AS (
SELECT customer_number,
RANK() OVER (ORDER BY order_count DESC) AS order_rnk
FROM customer_order_count
)
SELECT customer_number
FROM customer_order_rank
WHERE order_rnk = 1;