题目:
编写一个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;
标签:586,customer,group,10,number,力扣,limit,MySQL,select From: https://www.cnblogs.com/liu-myu/p/17232741.html