美文网首页数据分析面试题
sql面试题3,容易题、中等题、困难题

sql面试题3,容易题、中等题、困难题

作者: 美琦miki视觉笔记 | 来源:发表于2020-03-15 11:19 被阅读0次

容易题

每一行代表了这个订单的id、完成这个订单司机的id,这个订单的金额,订单完成时间,想要一个sql:如果某一天中,任何一个司机完成了5单及以上,且5单的总金额大于50元,把这天和对应的司机id输出。

输出列名:date,drier_id

知识点:子查询或者用having做筛选。

中等题

每一行代表这个用户是否在当天活跃过,如果一个用户在当天活跃过,且在未来的第2到第30天又活跃过,则称其为当天的活跃30天留存用户,比如表中a和b用户都在2019/1/1活跃了,a在2019/1/3活跃了,所以满足在2019/1/1的活跃30天留存条件,b没有在第2到第30天活跃过,因此不满足活跃30天留存。我想要每天的活跃用户数和活跃30天留存用户数

上表正确输出

知识点:留存的自连接写法,日期加减写法。

下面是我写的:

-- CREATE TABLE `test`.`Activate` (

--  `User_id` INT NULL,

--  `date` DATETIME NOT NULL);

--  * from test.Activate

-- insert into test.Activate values ('1','2019/01/01');

-- insert into test.Activate values ('1','2019/01/03');

-- insert into test.Activate values ('2','2019/01/01');

-- insert into test.Activate values ('2','2019/05/01');

-- -- insert into test.Activate values ('3','2019/01/01');

-- -- insert into test.Activate values ('3','2019/01/30');

-- select * from Activate

select a.date,count(a.user_id)as '每天活跃用户数',count(b.user_id) as'活跃30天留存用户数' from

(select User_id,date from Activate)a

left join (select User_id,date from Activate)b

on a.User_id=b.User_id

and date_add(a.date,interval 1 day)<=b.date and b.date<=date_add(a.date,interval 29 day)

group by 1

这里之前出了几次错,一个是用了inner join以后只有一条 01-01的数据

一个是on  and我一开始用的是where,那也只有一条01-01的数据了

因为不满足的直接被筛选掉了。

另外查了这个用法  date_add(a.date,interval 1 day)是说加一天

然后这个双边好像写成<=b<=会出错

困难题:

里面第二行的结束时间应该为1:30

每行代表司机开始玩游戏的时间(start_time)和游戏结束时间(end_time),请问每个司机结束一场游戏后,平均多久时间内会开始下场游戏?如果司机只玩过一次游戏,就不计算该司机。

CREATE TABLE `test`.`game`

( `drier_id` INT NULL,

  `start_time` DATETIME NOT NULL,

  `end_time` DATETIME NOT NULL

  );

insert into game values ('1','2019/01/01 00:00:00','2019/01/01 00:20:00');

insert into game values ('1','2019/01/01 01:15:00','2019/01/01 01:30:00');

insert into game values ('1','2019/01/01 02:00:00','2019/01/01 02:15:00');

insert into game values ('2','2019/01/01 01:15:00','2019/01/01 00:30:00');


一开始写错的,我还改了好多次,真的是完挂的节奏:

-- select a.drier_id,a.start_time,a.end_time,b.start_time,b.end_time

select a.drier_id,avg(datediff(b.start_time,a.end_time))as '平均游戏间隔' from 这里datediff是天的所以求出来0了,要用timestampdiff(minute/hour/day,开始时间小的,结束时间大的)

(select drier_id,start_time,end_time,rank() over (partition by start_time order by start_time) as rank_ from game)a  这里写错了 partition by starttime的话每一次都不一样,会有多个rank1,要换成id以后针对一个id分组,多个记录才会rank 123

left join (select drier_id,start_time,end_time,rank() over (partition by start_time order by start_time) as rank_ from game)b 写错了同理

on a.drier_id=b.drier_id

where a.rank_+1=b.rank_ and  count(a.drier_id)>1 这里count应该是要放到having去

group by 1

-- having count(a.drier_id)>1但是因为where里面a必须要有2个及以上,所以这个不用写了。


最后对的:

select a.drier_id,avg(timestampdiff(minute,a.end_time,b.start_time))as '平均游戏间隔'

from

(select drier_id,start_time,end_time,rank() over (partition by drier_id order by start_time) as rank_ from game)a

left join (select drier_id,start_time,end_time,rank() over (partition by drier_id order by start_time) as rank_ from game)b

on a.drier_id=b.drier_id

where a.rank_+1=b.rank_

group by 1

上表正确输出

知识点:窗口函数row_number用法,时间加减写法。

关于窗口函数的题:解一下TMD几道热门数据分析面试题。

相关文章

  • sql面试题3,容易题、中等题、困难题

    容易题 每一行代表了这个订单的id、完成这个订单司机的id,这个订单的金额,订单完成时间,想要一个sql:如果某一...

  • 0710,0711 leetcode刷题小结

    暑期目标:刷100题,当前进度:2.8题其中:简单题记0.5题;中等题记0.8题;困难题记1.5题; 07.10 ...

  • python刷力扣之简单题目录

    这里是力扣简单题的方案解析及python实现,有关中等和困难题目,请移步: 简单题(已完成,完善中)中等题(更新中...

  • SQL面试72题

    ​ SQL面试72题 大家好,这一期呢,我们来看一下sql的面试题。 第1题,什么是sql? 结构化查询语言。用来...

  • sql

    SQL面试72题 大家好,这一期呢,我们来看一下sql的面试题。 第1题,什么是sql? 结构化查询语言。用来创建...

  • Leetcode刷题总结(4):Mock Interview

    emm……结果每个session就一道题? 似乎简单题是30分钟,中等题是40分钟,难题是60分钟,而且还会出来一...

  • 细节决定成败

    中考数学,按题目的难度比例划分,基本可分为容易题、较容易题、较难题,其比例为7:2:1。学生要考高分,关键是容易题...

  • 58难题还是容易题?

    课间x去办公室送物理作业,刚好要找她谈话,她这次进步非常大,尤其是数学和物理。希望进一步把语文英语提升一步。语文重...

  • LeetCode | SQL | 3题

    凡是遥远的地方 对我们都有一种诱惑不是诱惑于美丽 就是诱惑于传说即便远方的风景 并不尽人意我们也无需在乎 因为这实...

  • 经典Hive SQL面试题

    第一题 需求 实现 数据准备 查询SQL 第二题 需求 实现 数据准备 查询SQL实现 第三题 需求 实现 数据准...

网友评论

    本文标题:sql面试题3,容易题、中等题、困难题

    本文链接:https://www.haomeiwen.com/subject/yrnfehtx.html