持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
一、问题描述
表: Orders
+-----------------+----------+
| Column Name | Type |
+-----------------+----------+
| order_number | int |
| customer_number | int |
+-----------------+----------+
Order_number是该表的主键。
此表包含关于订单ID和客户ID的信息。
编写一个SQL查询,为下了 最多订单 的客户查找 customer_number 。
测试用例生成后, 恰好有一个客户 比任何其他客户下了更多的订单。
查询结果格式如下所示:
题目链接:订单最多的客户
二、题目要求
样例
输入:
Orders 表:
+--------------+-----------------+
| order_number | customer_number |
+--------------+-----------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 3 |
+--------------+-----------------+
输出:
+-----------------+
| customer_number |
+-----------------+
| 3 |
+-----------------+
解释:
customer_number 为 '3' 的顾客有两个订单,比顾客 '1' 或者 '2' 都要多,因为他们只有一个订单。
所以结果是该顾客的 customer_number ,也就是 3 。
考察
1.聚合函数
2.建议用时10~25min
三、问题分析
对于这一题,题目要求我们求出订单最多的客户,做题之前要注意题目只有一个订单最多的用户,而不是多个客户数据。
我们先使用聚合函数的结果如下:
根据customer_number进行聚合,对出现的订单数量进行计数处理,出现最多的应该是customer_number为第3个,我们只需要将这一行数据排序成第一行,这样选择的话就比较好操作。
排序后的结果如下:
在 MySQL 中, LIMIT 语句可以被用来限制 SELECT 语句的返回行数。所以我们使用limit 1只要返回第一行的结果,这就是题目要求我们求出的订单最多的客户号。
四、编码实现
select customer_number
from Orders
group by customer_number -- 根据customer_number进行聚合分类
order by count(customer_number) desc --对聚合之后进行排序结果
limit 1 --返回第1行的结果