滴滴新鲜热乎真题
太难了呜呜呜
为用户提供打车服务。现有四张表,分别是
driver(司机数据)表,
online_time(在线时长数据)表,
order_info(订单数据)表,
city(城市匹配数据)表。
问题如下:
- 提取2020年8月各城市每天的司机数、快车订单量和快车流水数据。
- 提取2020年8月和9月,每个月的北京市新老司机(首单日期在当月为新司机)的司机数、在线时长和TPH(订单量/在线时长)数据。
- 分别提取司机数大于20,司机总在线时长大于2小时,订单量大于1,乘客数大于1的城市名称数据。
(1)提取2020年8月各城市每天的司机数
解题思路:
- 限定时间在2020年8月,可以使用between and;
- 各城市每天是按照城市和日期(每天)进行分组;
- 司机数是使用count(distinct 司机id)来计数,如果司机id是主键的话,可以不使用distinct。
最终答案如下:
SELECT b.城市名称,a.日期,count(DISTINCT 司机id) as 司机数 FROM driver as a LEFT JOIN city as b on a.城市id=b.城市id WHERE 日期 BETWEEN '2020-08-01' and '2020-08-31' GROUP BY a.城市id, a.日期;
解题思路:
- 时间限定和前面的一样,也可以使用date_format来限定日期;
- 快车,则需要从产品线id中提取出代表快车的编号,如前面说的,3代表快车,可以使用where来限定id=3;
- 订单量根据订单id进行计算。
答案如下:
SELECT c.城市名称,a.日期,COUNT(DISTINCT 订单id) FROM order_info as a LEFT JOIN driver as b on a.司机id=b.司机id LEFT JOIN city as c on b.城市id=c.城市id WHERE 产品线id='3' and DATE_FORMAT(a.日期,'%Y-%m')='2020-08' GROUP BY b.城市id,a.日期;
(3)提取2020年8月各城市每天的快车流水数据
解题思路:
- 大部分解题思路和前面一样,有变化的是流水数据,流水数据是需要使用sum来进行计算得到的。
SELECT c.城市名称,a.日期,SUM(流水) as 流水数据 FROM order_info as a LEFT JOIN driver as b on a.司机id=b.司机id LEFT JOIN city as c on b.城市id=c.城市id WHERE 产品线id='3' and DATE_FORMAT(a.日期,'%Y-%m')='2020-08' GROUP BY b.城市id,a.日期;
B站的题
面试官直接给了2表,表名自己定义吧。 重要的是思路。
表1 用户访问表
用户id 访问日期 是否是会员 观看视频id
表2视频信息表
视频id 视频名称 视频类型
1.统计某日 首次开通会员的人数
2.计算鬼畜区的用户里,有多少用户看过汽车,番剧区用户里,有多少用户看过放映厅?(1分)
3.哪一类的视频观看人数最多(2分)
4.某天最受欢迎的视频类型是什么?(2分)
推荐大家先做一下牛客网的SQL实战
基础差一点的可以先做基础入门的
我组了一个数据分析交流群,数分的同学可以加,可以来交流思路。
全部评论
(3) 回帖