顾乔芝士网

持续更新的前后端开发技术栈

day11_订单最多的客户_最大的订单

一、题目

一张orders表

有order_number(订单编号)、

customer_number(客户编号)

两个字段

二、题目要求

找出订单最多的客户编号,就是找表里面customer_number条数最多的那个

三、示例

customer_number为1的客户有1笔订单

customer_number为2的客户有1笔订单

customer_number为3的客户有2笔订单

所以customer_number等于3的客户拥有的订单笔数最多,输出结果是3

看输入:

四、分析

1、通过group by分组求出每个customer_number拥有的订单总数

select

t.customer_number,

count(1) as num

from orders t

group by t.customer_number

2、我想到的方法是先找出比去其他客户订单数量少的customer_number

然后再排掉这些customer_number,剩下的就是需要的订单笔数最多的customer_number

3、用1中的sql分别作为两个临时表,用inner join关联,可以看一下笛卡尔积后的效果

从上面的图片中

我们只要找出

①tmp1的customer_number跟tmp2的customer_number比(两者的customer_number不相等的前提下)

②tmp1的count比tmp2的count小

满足上面两个条件其实就是找出了标绿的那两条数据 我们只要tmp1表的customer_number(即找出了1,2)

4、外面再套一层,从orders表查,限制customer_number not in 第三步查出来的customer_number,取customer_number的时候去一下重,因为多订单的客户编号会有多条

五、sql实现

with

tmp1 --临时表1

as(

select

t.customer_number,

count(1) as num

from orders t

group by t.customer_number),

tmp2 --临时表2

as(

select

t.customer_number,

count(1) as num

from orders t

group by t.customer_number)

select

distinct customer_number

from orders

where customer_number not in

--外层限制客户编号不在小的订单客户编号里面

(

--内层查出订单数比别的客户少的customer_number

select

distinct tmp1.customer_number

from

tmp1 inner join tmp2

on tmp1.customer_number <> tmp2.customer_number

and tmp1.num < tmp2.num

)

还有另外一种思路,就是先找出最大的订单数,然后再去找哪些customer_number的订单数是等于最大订单数的,大家可尝试一下~

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言