滴滴SQL面试题之打车业务问题如何分析

本文详细解析了滴滴面试中涉及的SQL题目,包括如何分析2020年8月各城市司机数、快车订单量和流水,8月9月北京市新老司机数据,以及司机数、在线时长、订单量和乘客数超过特定值的城市数据。通过数据类型转化、分组聚合等SQL操作,解答业务问题。
摘要由CSDN通过智能技术生成

目录

一、题目

二、步骤

        1、数据类型转化

        2、提取2020年8月各城市每天的司机数,快车订单量和快车流水数据

                ①2020年8月各城市每天的司机数

                ②快车订单量和快车流水数据 

                 ③小结

3、 提取2020年8月和9月,每个月的北京市新老司机(首单日期在当月为新司机)的司机数、在线时长和TPH(订单量/在线时长)数据。

                ①2020年8月和9月的新司机的司机数

                 ②在线时长

                 ③订单量

                 ④总结

        4、分别提取司机数大于20,司机总在线时长大于2小时,订单量大于1,乘客数大于1的城市名称数据。 

                ①司机数大于20的城市名称

                 ②司机在线总时长大于2小时

                ③ 订单量大于1

                 ④乘客数大于1

                 ⑤小结


一、题目

        公司A是的app(类似滴滴、uber)为用户提供打车服务。现有四张表,分别是“司机数据”表,“订单数据”表,“在线时长数据”表,“城市匹配数据”表。业务问题:

1. 提取2020年8月各城市每天的司机数、快车订单量和快车流水数据。

2. 提取2020年8月和9月,每个月的北京市新老司机(首单日期在当月为新司机)的司机数、在线时长和TPH(订单量/在线时长)数据。

3. 分别提取司机数大于20,司机总在线时长大于2小时,订单量大于1,乘客数大于1的城市名称数据。

二、步骤

        1、数据类型转化

        通过观察数据库表结构可知,关于时间的存储类型是varchar,但是需要提取到月份,所以需要将时间列的类型转换成date的特定的格式(数据中涉及多个时间)

update 司机数据 
set 日期=date_format(日期,'%Y-%m-%d');

        2、提取2020年8月各城市每天的司机数,快车订单量和快车流水数据

                ①2020年8月各城市每天的司机数

        根据题目意思以及表结构,需要将城市匹配数据与司机数据两张表进行连接,连接的条件是司机id相等

        一个限制条件——2020年8月,也就是司机数据表的日期在2020-08-01到2020-08-31范围之内

        一个聚合——对司机数据表中的司机id进行聚合count()

        两个分组——8月各城市,也就是8月的每天以及每个城市的情况,所以需要对日期以及城市id进行分组

select b.`城市名称`,a.`日期`,COUNT(司机id) as '司机数'from 
`司机数据` as a left join `城市匹配数据` as b
on a.`城市id`=b.`城市id`
where a.`日期` between '2020-08-01' and '2020-08-31'
group by a.`城市id`,a.`日期`

                ②快车订单量和快车流水数据 

        在四个表中,只有订单数据中含有快车数据,但是表中没有城市id和司机id,所以需要跟其他表进行关联才能得到结果

        两个限制条件——一个是时间上的限制,一个就是订单的类型

        两个聚合——一个是订单量,一个是流水数据

                订单量也就是对产品线id的求个数和

                流水数据是对表中流水的求和

        两个分组——8月各城市,也就是8月的每天以及每个城市的情况,所以需要对日期以及城市id进行分组

select c.`城市名称`,a.`日期`,COUNT(a.`产品线id`) as '快车订单量',SUM(a.`流水`) as '快车流水数据' from 
`订单数据` as a left join `司机数据` as b
on a.`司机id`=b.`司机id`
left join `城市匹配数据` as c
on b.`城市id` = c.`城市id`
where a.`日期` between '2020-08-01' and '2020-08-31' and a.`产品线id`=3
GROUP BY c.`城市id`,b.`日期`

                 ③小结

        前两步已经分别求出了想要的数据,但是因为判断条件的原因,不能将两张表给联合起来,所以只能将两个表作为子表,然后再去查子表得到数据

        3、 提取2020年8月和9月,每个月的北京市新老司机(首单日期在当月为新司机)的司机数、在线时长和TPH(订单量/在线时长)数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值