力扣刷题学习SQL篇——1-18 订单最多的客户(where里面不能使用聚合函数,having可以)

20 篇文章 0 订阅
11 篇文章 0 订阅

力扣刷题学习SQL篇——1-18 订单最多的客户(where里面不能使用聚合函数,having可以)

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值