mysql 窗口函数面试题_没有窗口函数,你能很快做出这道MySQL面试题吗?

这是另外一个面试题目,相对难说有点难度,由于MySQL8.0以前没有“窗口函数”,当你碰到了这个题目,你是否能够很快写出这个答案来呢?

caf251aac2be81518411ca8e131792e2.png

请使用上述数据,完成如下效果:

4f5b159e745412c5af2156a09b4cc0bd.png

建表语句

create table mianshi1 (

id varchar(20),

dates varchar(20),

v_num int

) charset = utf8;

插入数据

insert into mianshi1 values

("A","2015-01",5),

("A","2015-01",15),

("B","2015-01",5),

("A","2015-01",8),

("B","2015-01",25),

("A","2015-01",5),

("A","2015-02",4),

("A","2015-02",6),

("B","2015-02",10),

("B","2015-02",5),

("A","2015-03",16),

("A","2015-03",22),

("B","2015-03",23),

("B","2015-03",10),

("B","2015-03",11);

数据如下

a03a62b484cd1c5faca1a93a7e6a2ef0.png

第一步:求出“当月访问次数”

select

id 用户,

dates 月份,

sum(v_num) 当月访问次数

from mianshi1

group by id,dates

结果如下

f27afee1c11714ea556a852e02074c4b.png

第二步:为了清楚讲解这个面试题,我们使用CTAS保存这个中间表

create table zhongjian1 as

select

id 用户,

dates 月份,

sum(v_num) 当月访问次数

from mianshi1

group by id,dates

结果如下

a2067b266e5b7aef4cf715f54c6b1ab9.png

第三步:求出“最大访问次数”(自关联)

select

b.用户 用户,

b.月份 月份,

max(a.当月访问次数) 最大访问次数,

sum(a.当月访问次数) 总访问次数

from zhongjian1 a

join zhongjian1 b

on a.用户 = b.用户

where a.月份 <= b.月份

group by b.用户,b.月份;

结果如下

a43fe471982a564c14afd3195ca10f2d.png

第四步:为了清楚讲解这个面试题,我们再次使用CTAS保存这个中间表

create table zhongjian2 as

select

b.用户 用户,

b.月份 月份,

max(a.当月访问次数) 最大访问次数,

sum(a.当月访问次数) 总访问次数

from zhongjian1 a

join zhongjian1 b

on a.用户 = b.用户

where a.月份 <= b.月份

group by b.用户,b.月份;

结果如下

0fe61d2cdb0f62045cc57bbe6119faad.png

第五步:将zhongjian1表和zhongjian2表,进行表合并,得到最终结果

select

a.用户 用户,

a.月份 月份,

a.当月访问次数 当月访问次数,

b.最大访问次数 最大访问次数,

b.总访问次数 总访问次数

from zhongjian1 a

join zhongjian2 b

on a.用户 = b.用户 and a.月份 = b.月份;

结果如下

1666324ae14a28662f636a0d8c9f5589.png

标签:面试题,01,访问,用户,次数,MySQL,2015,zhongjian1,这道

来源: https://blog.csdn.net/weixin_41261833/article/details/105748772

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值