当前位置:   article > 正文

滴滴数据分析岗SQL面试题!

滴滴sql面试题

作者:逆流

转自:爱数据原统计网

https://zhuanlan.zhihu.com/p/136915306


大家好,我是小z


今天给大家分享一道滴滴SQL的笔试题。

题目:

问题:

1.订单的应答率、完单率分别是多少?

2.呼叫应答时间多长?

3.从这一周的数据来看,呼叫量最高的是哪一个小时(当地时间)?

呼叫量最少的是哪一个小时(当地时间)?

4.呼叫订单第二天继续呼叫的比例有多少?

5.如果要对表中乘客进行分类,你认为需要参考哪一些因素?

解题过程:

导入mysql数据库及数据预处理

观察表中时间相关数据结合题目,要做出2步数据预处理

【1】将时间相关列转换格式

【2】按巴西比中国慢11小时,将表中北京时间转换为巴西时间。

  1. -- 利用cast函数转换成日期数据
  2. update didi set
  3. call_time = cast(call_time as datetime),
  4. grab_time = cast(grab_time as datetime),
  5. cancel_time = cast(cancel_time as datetime),
  6. finish_time = cast(finish_time as datetime);
  7. -- 将北京时间调整为巴西时间,date_sub函数
  8. update didi set
  9. call_time = date_sub(call_time,interval 11 hour ),
  10. grab_time = date_sub(grab_time,interval 11 hour ),
  11. cancel_time = date_sub(cancel_time,interval 11 hour ),
  12. finish_time = date_sub(finish_time,interval 11 hour );

处理后数据

问题1:

订单的应答率、完单率分别是多少?

应答率 = 应答订单数 / 呼叫订单数

完单率 = 完成订单数 / 呼叫订单数

  1. select sum(if(year(grab_time)<>1970,1,0))/count(call_time)as '应答率',
  2. sum(if(year(finish_time)<>1970,1,0))/count(call_time)as '完单率'
  3. from didi

问题2:

呼叫应答时间多长?

  1. -- 使用timestampdiff函数,计算应答时间与呼叫时间之间的时长
  2. select sum(TIMESTAMPDIFF(MINUTE,call_time,grab_time))/count(grab_time)as '呼叫应答时间'
  3. from didi
  4. where year(grab_time)<>1970;

问题3:

从这一周的数据来看

呼叫量最高的是哪一个小时(当地时间)?

呼叫量最少的是哪一个小时(当地时间)?

根据题意,需要新增一列数据,订单呼叫时间的小时,进行分组分析

  1. -- 新增一列
  2. alter table didi add column call_time_hour VARCHAR(255);
  3. -- 使用substr函数做字符串截取,为新列赋值
  4. update didi set call_time_hour = SUBSTR(call_time from 12 for 2);
  5. -- 方法2:使用date_format函数转换格式
  6. update didi set call_time_hour = DATE_FORMAT(call_time,'%k')
  1. -- 找出呼叫量最高的小时,显示2行防止出现重复值。
  2. select call_time_hour,count(call_time)as'呼叫量'
  3. from didi
  4. GROUP BY call_time_hour
  5. ORDER BY count(call_time) desc
  6. limit 2;

  1. -- 找出呼叫量最少的小时,显示3行确认是否有第三个相等值。
  2. select call_time_hour,count(call_time)as'呼叫量'
  3. from didi
  4. GROUP BY call_time_hour
  5. ORDER BY count(call_time) asc
  6. limit 3;

得出结论:呼叫量最高的是18时,呼叫量最少的是2和3时。

问题4:

呼叫订单第二天继续呼叫的比例有多少?

  1. select count(DISTINCT a.order_id)/(select count(DISTINCT order_id) from didi)as'第二天继续呼叫比例' 
  2. from didi a join didi b
  3. on a.passenger_id = b.passenger_id
  4. where datediff(a.call_time,b.call_time)=1

问题5:

如果要对表中乘客进行分类,你认为需要参考哪一些因素?

基于已有的表格中数据,可以参RFM模型对用户进行分类,

R:乘客上一次打车距离3月11日的时间间隔

F:乘客在数据期间的打车频率

M:打车消费金额(表中无打车金额,可以用完成订单总时长代替)

以上就是作者的解题思路,如果你有更好的方法,可以在留言区分享喔。

END -

本文为转载分享,侵删

用Pandas秒秒钟搞定24张Excel报表!

10大Python数据可视化库!

后台回复“入群”即可加入小z数据干货交流群
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/782039
推荐阅读
相关标签
  

闽ICP备14008679号