力扣586(MySQL)-订单最多的客户(简单)

题目:

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

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

查询结果格式如下所示。

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/customer-placing-the-largest-number-of-orders
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

使用group by 将顾客编号进行分组,然后统计出他们的订单数,再使用order by 将订单数进行降序排序,最后使用limit输出恰好只有一位最多订单的顾客编号。

1 select customer_number
2 from Orders
3 group by customer_number
4 order by count(*) desc
5 limit 1;

进阶:如果有多位一样订单数的顾客,则使用having子查询来查找到哪些顾客同样最多。

 1 select customer_number
 2 from Orders
 3 group by customer_number
 4 having count(*) = (
 5     select count(*)
 6     from Orders
 7     group by customer_number
 8     order by count(*) desc
 9     limit 1 
10 );

小知识:

①where 后面不能使用聚合函数。

where在分组前使用,where只作用于表;

having在分组后使用,作用于group by子句的分组结果,如果不存在GROUP BY子句,则作用于WHERE子句的搜索结果,如果where子句也没有,则作用于表;

②limit [n],rows

n:代表从哪一行开始,默认值为0

rows:返回行数

limit后面只有一个参数,就是检索前多少行。如果limit后面是2个参数,就是n+1行开始,检索rows行数据。

 例如:

查询 10-20 条数据:select * from table_name limit 10, 10;

检索前10行记录:select * from table_name limit 10;

③limit m offset n:跳过 n 行数据,取 m 行数据

查询 10-20 条数据:select * from table_name limit 10 offset 10;

posted on 2023-03-19 12:04  我不想一直当菜鸟  阅读(118)  评论(0编辑  收藏  举报