滴滴面试题:打车业务问题如何分析?

上一篇 / 下一篇  2020-06-04 14:00:37

  【题目】
  公司的app(类似滴滴、uber)为用户提供打车服务。现有四张表,分别是“司机数据”表,“订单数据”表,“在线时长数据”表,“城市匹配数据”表。(滴滴面试题)
  下图左表是“司机数据”表的部分数据。为了便于讲解,之后在涉及到表的时候,用下图右表来代替。右表中展示了左表的部分代表性数据。
  上表中的“产品线id”:1是表示专车,2表示企业,3表示快车,4表示企业快车
  业务问题
  1. 分析出2020年8月各城市每天的司机数、快车订单量和快车流水数据。
  【解题思路】
  为了方便数据处理,首先将这些表中所有的日期数据转化为日期格式‘年-月-日’ 的形式。需要使用date_fromat 函数。
  sql语句为
  update司机数据
  set日期=date_format(日期,'%Y-%m-%d');
  update 司机数据
  set 首次完成订单时间=date_format(首次完成订单时间,'%Y-%m-%d');
  update 订单数据
  set 日期=date_format(日期,'%Y-%m-%d');
  update 在线时长数据
  set日期=date_format(日期,'%Y-%m-%d');
  处理后的表如下图,可以发现对应日期列已经修改过来了。
  接下来看需要分析的业务问题。
  1. 提取2020年8月各城市每天的司机数、快车订单量和快车流水数据。
  (1)2020年8月各城市每天的司机数
  使用逻辑树分析方法,拆解业务需求的每个部分。
  “2020年8月”,可以用 between and 函数来对时间进行条件限制。
  “每天的司机数”,司机数的计算用到的表是“司机数据” 表。当出现“每天”要想到《猴子 从零学会sql》里讲过的分组汇总,来解决“每天”这样的问题。用“日期“来分组(group by),用 count(司机id) 来汇总司机数。
  “各城市”,城市在“城市匹配数据“表中。也就是“每个城市”所以用“城市“来分组(group by)。
  这里涉及到两个表“司机数据” 表和“城市匹配数据“表,所以遇到多表查询的情况,要想到《猴子 从零学会sql》里讲过的多表联结。下图是两表联结的条件(通过城市id联结)。
  使用哪种联结呢?
  因为要查询的是司机数,所以要保留“司机数据”表中的全部数据,因此使用左联结。
  sql语句如下
  查询结果如下图(部分展示)
  (2)2020年8月各城市每天的快车订单量
  “2020年8月”,可以用 between and 函数来对时间进行条件限制。
  “每天的快车订单量”,对于计算快车订单量,用到的表是“订单数据” 表。根据题目的字段解释,“产品线id”: 1是表示专车,2表示企业,3表示快车,4表示企业快车。可以用where子句把快车数据先筛选出来(产品线id=3)。
  当出现“每天”要想到《猴子 从零学会sql》里讲过的分组汇总,来解决“每天”这样的问题。用“日期“来分组(group by),用 count(订单id) 来汇总订单量。
  “各城市”,城市在“城市匹配数据“表中。也就是“每个城市”所以用“城市“来分组(group by)。
  在“订单数据” 表、“司机数据”表中都没有城市数据,所以需要三表联结,下面是3表的关系图。
  使用哪种联结呢?
  因为要查询的是快车订单量,所以要保留“订单数据”表中的全部数据,因此使用左联结来与“司机数据”进行联结(联结依据为“司机id”)。然后,因为要对第一次联结后的表的“城市id”与“城市名称”进行匹配,所以我们用左联结来进行匹配。
  sql语句如下
  查询结果如下图



TAG: 测试面试题

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2020-08-04  
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

数据统计

  • 访问量: 21880
  • 日志数: 41
  • 建立时间: 2019-02-12
  • 更新时间: 2020-07-28

RSS订阅

Open Toolbar