1、题目
题目链接:https://leetcode.cn/problems/customer-placing-the-largest-number-of-orders/
SQL架构
Create table If Not Exists orders (order_number int, customer_number int)
Truncate table orders
insert into orders (order_number, customer_number) values ('1', '1')
insert into orders (order_number, customer_number) values ('2', '2')
insert into orders (order_number, customer_number) values ('3', '3')
insert into orders (order_number, customer_number) values ('4', '3')
表: 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 吗?
2、解法
1、根据customer_number进行分组,然后根据count(customer_number)进行降序排列,获取第一条数据那么就行了。
select customer_number from Orders group by customer_number order by count(customer_number) desc limit 0,1
2、本题只有一个第一所以上面的方法可以,但是对于存在多个并列第一的情况,我们可以通过having来解决这个问题。having可以使用聚合函数,那么我们判断count(customer_number) 等于里面排行最大的第一条数据从而解决这个问题。那么多个相同值的就能获取到了
select customer_number from Orders group by customer_number having count(customer_number) =
(select count(customer_number) from Orders group by customer_number order by count(customer_number) desc limit 0,1)
知识扩展
如果你对having这个字句不太熟悉,可以看这里
https://www.runoob.com/sql/sql-having.html