机场网站建设需求,个人电脑做网站打不开数据库,网站建设和维护采购协议,开发网站多少钱一个月大家好#xff0c;我是空空star#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目#xff1a;586. 订单最多的客户二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总… 大家好我是空空star本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目586. 订单最多的客户二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 一、题目586. 订单最多的客户
表: 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 吗
二、解题
1.正确示范①
提交SQL
select customer_number
from Orders
group by customer_number
order by count(1) desc limit 1;运行结果 2.正确示范②
提交SQL
select customer_number from(select customer_number,row_number() over(order by num desc) colfrom(select customer_number,count(1) numfrom Ordersgroup by customer_number) u
) u2 where col1;运行结果 3.正确示范③
提交SQL
select customer_number from(select customer_number,rank() over(order by num desc) colfrom(select customer_number,count(1) numfrom Ordersgroup by customer_number) u
) u2 where col1;运行结果 4.正确示范④
提交SQL
select customer_number from(select customer_number,dense_rank() over(order by num desc) colfrom(select customer_number,count(1) numfrom Ordersgroup by customer_number) u
) u2 where col1;运行结果 5.其他 总结 正确示范①思路 通过group by 按照客户分组计算出每个客户的订单数再按订单数降序取第一条的客户limit 1 正确示范②思路 通过group by 按照客户分组计算出每个客户的订单数num再通过row_number() over(order by num desc)取排名1 正确示范③思路 通过group by 按照客户分组计算出每个客户的订单数num再通过rank() over(order by num desc)取排名1 正确示范④思路 通过group by 按照客户分组计算出每个客户的订单数num再通过dense_rank() over(order by num desc)取排名1 小结 今天做的这两道题都可以用以下三个开窗函数因为题目给的测试用例中不存在第一名的数量相同。掌握以下三个开窗函数应用场景还是非常多的。希望可以帮助到新手。 row_number顺序排序 rank并列排序会跳过重复的序号比如序号为1、1、3 dense_rank并列排序不会跳过重复的序号比如序号为1、1、2。