首页 > 数据库 >没有窗口函数,你能很快做出这道MySQL面试题吗?

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

时间:2022-10-11 14:36:42浏览次数:45  
标签:面试题 01 访问 用户 次数 MySQL 2015 zhongjian1 这道


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

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


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


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

建表语句

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);

数据如下

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

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

select 
id 用户,
dates 月份,
sum(v_num) 当月访问次数
from mianshi1
group by id,dates

结果如下

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

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

create table zhongjian1 as
select
id 用户,
dates 月份,
sum(v_num) 当月访问次数
from mianshi1
group by id,dates

结果如下

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

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

select 
b.用户 用户,
b.月份 月份,
max(a.当月访问次数) 最大访问次数,
sum(a.当月访问次数) 总访问次数
from zhongjian1 a
join zhongjian1 b
on a.用户 = b.用户
where a.月份 <= b.月份
group by b.用户,b.月份;

结果如下

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

第四步:为了清楚讲解这个面试题,我们再次使用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.月份;

结果如下

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

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

select 
a.用户 用户,
a.月份 月份,
a.当月访问次数 当月访问次数,
b.最大访问次数 最大访问次数,
b.总访问次数 总访问次数
from zhongjian1 a
join zhongjian2 b
on a.用户 = b.用户 and a.月份 = b.月份;

结果如下

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


标签:面试题,01,访问,用户,次数,MySQL,2015,zhongjian1,这道
From: https://blog.51cto.com/u_14346314/5746290

相关文章

  • ××教育Excel数据分析面试题
    如果觉得文章写得好,如果你想要博客文章中的数据,请关注公众号:【数据分析与统计学之美】,进群和作者交流!目录  ​​1、用颜色标记重复值​​​ ​​2、用颜色标记出姓名中......
  • Mysql根据组织ID查询该组织全量名称(所有上级组织名)
    SELECT@Pn:=idid,@pathId:=(SELECTGROUP_CONCAT(SUBSTRING_INDEX(@Pn:=(SELECTCONCAT(parent_id,'|',name)FROMorgWHEREid=SUBSTR......
  • mysql 8.0 密码破解及更新
    遗忘MySQL8.0数据库的root密码解决办法[root@mysql01~]#mysql--version#查看MySQL版本mysqlVer8.0.18forlinux-glibc2.12onx86_64(MySQLCommunity......
  • MySQL查询时记录行号rownum MySQL查询显示行号MySQL查询显示行号MySQL流水号自MySQL自
    MySQL查询时记录行号rownumMySQL查询显示行号MySQL查询显示行号MySQL流水号自MySQL自增行号一、前言Oracle中有rownum,实现查询的时候记录行号,MySQL中没有。这可难不......
  • Mysql 插入timestamp没有使用默认值问题
    在一次升级过程中,发现Mysql插入数据报了个错Column'create_time'cannotbenull.但是看了下这个字段虽然是非null,但是是有默认值的`create_time`timestampNOTNULL......
  • 【MySQL系列】-索引知多少
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。​​点击跳转到网站。​​索引及其作用索引(Index)是帮助MySQL高效获取数据的数据结构。索......
  • 「Java 数据结构」:手撕单链表的增删改查及大厂面试题。
    目录​​一、单链表的增删改查​​​​1、创建结点     ​​​​2、单链表的添加操作​​​​3、单链表的删除操作​​​​4、单链表的有效结点的个数​​​​二、......
  • 一文读懂 MySQL 索引
    1索引简介1.1什么是MySQL的索引官方定义:索引是帮助MySQL高效获取数据的数据结构从上面定义中我们可以分析出索引本质是一个数据结构,他的作用是帮助我们高效获取数......
  • Docker | Compose创建mysql容器
    本文通过DockerCompose来创建mysql容器在linux服务器上创建文件,用于管理容器mkdirdocker-mysqlcddocker-mysqlvimdocker-compose.yml#写入如下内容docker-c......
  • Mysql:聚集索引和非聚集索引
    聚集索引聚集索引概述聚集索引特点聚集索引优缺点聚集索引限制聚集索引真实开发总结1张表只能有1个聚聚索引,都是用主键作为聚聚索引使用。因此在建表的时候聚......