如何解决 LeetCode 586

发布: (2026年1月15日 GMT+8 11:25)
2 min read
原文: Dev.to

Source: Dev.to

问题概述

任务是找出下单数量最多的客户编号。Orders 表包含两个标识列:order_numbercustomer_number。测试用例保证恰好有一个客户拥有最多的订单,但后续问题会询问如何处理并列的情况。

解决思路

  1. 按客户聚合订单 – 使用 COUNT() 并配合 GROUP BY customer_number 计算每个客户的订单数量。
  2. 对聚合结果进行排名 – 使用窗口函数 RANK(),按订单数量降序排列。这样会把最高数量的客户(包括并列的)都赋予排名 1。
  3. 选择排名最高的客户 – 在结果集中筛选出 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;
Back to Blog

相关文章

阅读更多 »

如何解答 LeetCode 1193

问题描述 表 Transactions 具有以下列: - id 主键 - country - state 枚举:'approved' 或 'declined' - amount - trans...

理解数据库模型:DDIA 第2章

概述 本章节摘自《Designing Data‑Intensive Applications》,探讨了不同的数据库模型以及构建应用数据的策略。了解……

数据库事务

事务是 SQL 数据库工作方式的基础。每天都有数万亿次事务执行,遍布依赖 SQL 的数千个应用程序。