586. 订单最多的客户

245 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第36天,点击查看活动详情

一、题目

表: Orders

+-----------------+----------+
| Column Name     | Type     |
+-----------------+----------+
| order_number    | int      |
| customer_number | int      |
+-----------------+----------+
Order_number是该表的主键。
此表包含关于订单ID和客户ID的信息。

 

编写一个SQL查询,为下了 最多订单 的客户查找 customer_number 。

测试用例生成后, 恰好有一个客户 比任何其他客户下了更多的订单。

查询结果格式如下所示。

 

示例 1:

输入: 
Orders 表:
+--------------+-----------------+
| order_number | customer_number |
+--------------+-----------------+
| 1            | 1               |
| 2            | 2               |
| 3            | 3               |
| 4            | 3               |
+--------------+-----------------+
输出: 
+-----------------+
| customer_number |
+-----------------+
| 3               |
+-----------------+
解释: 
customer_number 为 '3' 的顾客有两个订单,比顾客 '1' 或者 '2' 都要多,因为他们只有一个订单。
所以结果是该顾客的 customer_number ,也就是 3

进阶: 如果有多位顾客订单数并列最多,你能找到他们所有的 customer_number 吗?

  • 来源:力扣(LeetCode)
  • 链接:leetcode.cn/problems/cu…
  • 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

创建数库

根据题意创建数据表,并填充数据

CREATE TABLE IF NOT EXISTS orders (
	order_number INT,
	customer_number INT
);

INSERT INTO orders VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 3);

解题

  • 根据题意要查询订单最多的客户,因此是这个以客户分组的,使用GROUP BY customer_number
  • 要计算不同用户的订单数量,这里使用count()查询,得到每个客户的订单量
  • 但当前只需要返回用户信息,这里就需要在select中去掉count()查询,并且在对数据进行降序,这里使用order by count(*) desc
  • 因为只需要一条数据,这里就使用limit 1
  • 最终执行语句,得到结果
SELECT customer_number
FROM orders 
GROUP BY customer_number
ORDER BY  COUNT(*) DESC
LIMIT 1;
  • 显示结果 image.png

三、执行语句

测试语句

image.png

四、总结

  • group by: 根据一定规则对数据集分成若干个小组,再分组处理数据集
  • order by: 用于对查询结果的排序,默认升序,降序设置为DESC
  • limit: limit x,y 是指以x条开始,每页y条数据,如果只有x,就代表只要前x条数据
  • count(*):标识计算所有的记录,包括为null的记录