# 滴滴面试题：打车业务问题如何分析？

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6Spn9Rn58uI8oKv0x%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_1.jpg?alt=media\&token=21242ac8-2115-43d0-9ac0-477996d4c8e8)

**【题目】**

公司的 app（类似滴滴、uber）为用户提供打车服务。现有四张表，分别是 “司机数据” 表，“订单数据”表，“在线时长数据”表，“城市匹配数据”表。（滴滴面试题）

下图左表是 “司机数据” 表的部分数据。为了便于讲解，之后在涉及到表的时候，用下图右表来代替。右表中展示了左表的部分代表性数据。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6Sywb6VTb9ZxZib17%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_2.png?alt=media\&token=30f83b26-a312-4135-8d35-6b4992fd0d10)

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6THn_ncHM_zbVmBIr%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_3.png?alt=media\&token=eb24c491-708d-426f-8ace-e577e3b7abf6)

上表中的 “产品线 id”: 1 是表示专车，2 表示企业，3 表示快车，4 表示企业快车

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6TaPZz6ebB5Dzab-w%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_4.png?alt=media\&token=ee247fca-8876-4853-94a4-bc6984a7ea15)

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6Tf6_qU92TF0wzx-M%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_5.png?alt=media\&token=07771b53-4917-49eb-b9ce-6bd0d6c7ac21)

**业务问题**

1. 分析出 2020 年 8 月各城市每天的司机数、快车订单量和快车流水数据。
2. 分析出 2020 年 8 月和 9 月，每个月的北京市新老司机（首单日期在当月为新司机）的司机数、在线时长和 TPH（订单量 / 在线时长）数据。
3. 分别提取司机数大于 20，司机总在线时长大于 2 小时，订单量大于 1，乘客数大于 1 的城市名称数据。

（文末有模拟数据下载）

**【解题思路】**

为了方便数据处理，首先将这些表中所有的日期数据转化为日期格式 ‘年 - 月 - 日’ 的形式。需要使用 date\_fromat 函数。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6TjYTsjW6KxEGStts%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_6.png?alt=media\&token=3f6198fa-c4da-47fb-a548-52a86ec52ed7)

sql 语句为

```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');
```

处理后的表如下图，可以发现对应日期列已经修改过来了。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6ToTrB0xL52JiqJr9%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_7.png?alt=media\&token=6d1a383e-a1a3-42d0-a3c1-b7b7ecf2e573)

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6TsQjDiiWjl3l8uC6%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_8.png?alt=media\&token=03e0909a-a157-49c1-8240-ac31f77021f9)

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6TxJWW_ASb5ebyjez%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_9.png?alt=media\&token=4157cf19-b1fb-4103-ae57-942f4abe8b91)

接下来看需要分析的业务问题。

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

**(1) 2020 年 8 月各城市每天的司机数**

**使用**[**逻辑树分析方法**](http://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==\&mid=2649246563\&idx=2\&sn=3ffe509999d144d23dec5acc101fc2ef\&chksm=835fc353b4284a45ce01391453fe2fec1b225bbd6bbdb67dd7f304aacdd4f21f60d0b27ba309\&scene=21#wechat_redirect)**，拆解业务需求的每个部分。**

**“2020 年 8 月”**，可以用 between and 函数来对时间进行条件限制。

**“每天的司机数”**，司机数的计算用到的表是 “司机数据” 表。当出现 “每天” 要想到《猴子 从零学会 sql》里讲过的分组汇总，来解决 “每天” 这样的问题。用“日期“来分组（group by），用 count(司机 id) 来汇总司机数。

**“各城市”**，城市在 “城市匹配数据“表中。也就是“每个城市” 所以用 “城市 “来分组（group by）。

这里涉及到两个表 “司机数据” 表和 “城市匹配数据 “表，所以遇到多表查询的情况，要想到[《猴子 从零学会 sql》](http://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==\&mid=2649247566\&idx=2\&sn=5af748b677eb72028764dde0577675fb\&chksm=835fc77eb4284e68e8cfe3f08c5a671b9e080b2651f20b40b1c793ffda4042ae43ad8f35a755\&scene=21#wechat_redirect)里讲过的多表联结。下图是两表联结的条件（通过城市 id 联结）。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6U0gjKepAihAX2Wj_%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_10.png?alt=media\&token=99fc04b4-a39e-4965-938c-d9d9839086fb)

使用哪种联结呢？

因为要查询的是司机数，所以要保留 “司机数据” 表中的全部数据，因此使用左联结。

sql 语句如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6U6tMLZNOZhtiBeHQ%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_11.png?alt=media\&token=677bb7bc-0c61-41b4-9556-011933c8e6c4)

查询结果如下图 (部分展示)

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6UA-jXfMr9WOKTSok%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_12.png?alt=media\&token=8ccd7783-ffac-4410-b484-e92f878d182c)

**(2) 2020 年 8 月各城市每天的快车订单量**

**“2020 年 8 月”**，可以用 between and 函数来对时间进行条件限制。

**“每天的快车订单量”**，对于计算快车订单量，用到的表是 “订单数据” 表。根据题目的字段解释，“产品线 id”: 1 是表示专车，2 表示企业，3 表示快车，4 表示企业快车。可以用 where 子句把快车数据先筛选出来（产品线 id=3）。

当出现 “每天” 要想到《猴子 从零学会 sql》里讲过的分组汇总，来解决 “每天” 这样的问题。用“日期“来分组（group by），用 count(订单 id) 来汇总订单量。

**“各城市”**，城市在 “城市匹配数据 “表中。也就是 “每个城市” 所以用 “城市 “来分组（group by）。

在 “订单数据” 表、“司机数据” 表中都没有城市数据，所以需要三表联结，下面是 3 表的关系图。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6UDq2hBB1T9LajlXh%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_13.png?alt=media\&token=9079539c-59cf-4e9f-9a00-0a8ddd45110b)

使用哪种联结呢？

因为要查询的是快车订单量，所以要保留 “订单数据” 表中的全部数据，因此使用左联结来与 “司机数据” 进行联结（联结依据为 “司机 id”）。然后，因为要对第一次联结后的表的“城市 id” 与“城市名称”进行匹配，所以我们用左联结来进行匹配。

sql 语句如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6UcUnimH64F5rWKNP%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_14.png?alt=media\&token=9252aacb-aa48-43f7-aff9-99e073c1cd00)

查询结果如下图

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6UhN6nQykAjrNgww2%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_15.png?alt=media\&token=72c10130-6d32-40fe-842e-515da590ac21)

**(3) 2020 年 8 月各城市每天的快车流水数据**

**“2020 年 8 月”**，可以用 between and 来对时间进行条件限制。

**“每天的快车流水数据”**，对于计算快车订单量，用到的表是 “订单数据” 表。根据题目的字段解释，“产品线 id”: 1 是表示专车，2 表示企业，3 表示快车，4 表示企业快车。可以用 where 子句把快车数据先筛选出来（产品线 id=3）。

当出现 “每天” 要想到《猴子 从零学会 sql》里讲过的分组汇总，来解决 “每天” 这样的问题。用“日期“来分组（group by），用 sum(流水) 来汇总流水。

**“各城市”**，城市在 “城市匹配数据“表中。也就是“每个城市” 所以用“城市“来分组（group by）。

在 “订单数据” 表、“司机数据” 表中都没有城市数据，所以需要三表联结，下面是 3 表的关系图。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV66-vXYe_4WeR3Rpc4%2F-MV6hBK2Pa-UvFmweqQv%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_16.png?alt=media\&token=ded1d14c-b870-40db-95f6-fe3d03e07524)

使用哪种联结呢？

因为要查询的是快车流水量，所以要保留 “订单数据” 表中的全部数据，因此使用左联结来与 “司机数据” 进行联结（联结依据为 “司机 id”）。然后，因为要对第一次联结后的表的“城市 id” 与“城市名称”进行匹配，所以我们用左联结来进行匹配。

sql 语句如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6hauNkWU-HZQv_tLJ%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_17.png?alt=media\&token=20c13c72-d7b1-4820-b9a8-428cb2c2e862)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6hmV2E6zs5iGjFQiI%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_18.png?alt=media\&token=930dfe9c-a5cc-41ec-9717-ce20f6ee4028)

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

我们将新老司机分开来分析，先针对新司机进行提取，然后老司机同理可得。

**（1）提取 2020 年 8 月和 9 月，每个月的北京市新司机的司机数。**

使用[多维度拆解分析方法](http://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==\&mid=2649246563\&idx=2\&sn=3ffe509999d144d23dec5acc101fc2ef\&chksm=835fc353b4284a45ce01391453fe2fec1b225bbd6bbdb67dd7f304aacdd4f21f60d0b27ba309\&scene=21#wechat_redirect)来拆解题目为以下子问题：

> 1）每个月的司机数
>
> 2）条件：新司机
>
> 2）时间条件：2020 年 8 月和 9 月
>
> 3）城市条件：北京市

**先来看子问题 1：每个月的司机数**

对于司机数的计算，用到 “司机数据” 表。根据《猴子 从零学会 sql》里讲过的，遇到 “每个” 这类型问题要用分组汇总。“每个月” 按月份分组（group by），用 count(司机 id) 来汇总司机数。

```sql
select count(司机id) as 司机数
from 司机数据
group by 月份；
```

这里的月份怎么得到呢？

可以通过 “日期” 列获得：`date_format(日期,'%Y-%m')`

所以，上面 sql 修改为：

```sql
select count(司机id) as 司机数
from 司机数据
group by date_format(日期,'%Y-%m') as 月份；
```

**子问题 2，条件：新司机**

对于 ‘新司机’ 这个条件，由题目中的释义可知：首单日期在当月为新司机。因此我们通过比较 "日期" 与 “首次完成订单日” 两列的年月 相等的，即为新司机。

我们用函数 `year(日期)` 来提取日期中的年份。用函数 `month(日期)` 来提取日期中的月份。

利用如下 “where” 条件来表示新司机。

```sql
where year(首次完成订单时间)=year(日期) 
and month(首次完成订单时间)=month(日期)
```

加入 “新司机” 条件后的 sql 如下：

```sql
select count(司机id) as 新司机数
from 司机数据
where year(首次完成订单时间)=year(日期) 
and month(首次完成订单时间)=month(日期) 
group by date_format(日期,'%Y-%m') as 年月；
```

**子问题 3，时间条件：2020 年 8 月和 9 月**

利用 where 加条件，between...and 函数限制时间范围。

```sql
where 日期 between '2020-08-01' and '2020-08-31'
or 日期 between '2020-09-01' and '2020-09-31'
```

```sql
select count(司机id) as 新司机数
from 司机数据
where year(首次完成订单时间)=year(日期) 
and month(首次完成订单时间)=month(日期) 
and (日期 between '2020-08-01' and '2020-08-31'
or 日期 between '2020-09-01' and '2020-09-31')
group by date_format(日期,'%Y-%m') as 年月；
```

**子问题 4，城市条件：北京市**

利用 where 添加城市条件，城市 id 等于北京市的 id。

```sql
where 城市id ='100000'
```

最终 sql 如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6huexohS98NWNZVa4%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_19.png?alt=media\&token=075a8bcf-b1c7-4887-be90-14a50291d2af)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6hzVRzwa8Ci5FM412%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_20.png?alt=media\&token=da036a17-4015-41f0-b75c-62114704e810)

**(2) 提取 2020 年 8 月和 9 月，每个月的北京市新司机的在线时长。**

对于在线时长的计算，用到 “在线时长数据” 表。根据《猴子 从零学会 sql》里讲过的，遇到 “每个” 这类型问题要用分组汇总。“每个月” 按月份分组（group by），在线时长的总长利用 sum(在线时长) 来计算。

而我们发现新司机在 “在线时长数据” 表 中并没有，而是在 “司机数据” 表 中通过查询语句才能得到，因此我们用两个表的联结，得到 8,9 月北京新司机的在线时长，然后再利用子查询，使用 sum(在线时长) 得到总时长。

sql 语句解析如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6i6ny3uMYwZPn4qBd%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_21.png?alt=media\&token=83000d3e-9cf7-4208-bfac-ccbb44d245bd)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6iB_56LDRiWBtFs3l%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_22.png?alt=media\&token=dd6c518c-392d-42e1-927a-f5d5ac15eae8)

**(3)** **提取 2020 年 8 月和 9 月，每个月的北京市新司机的 TPH（订单量 / 在线时长）。**

由题可知，TPH = 订单量 / 在线时长。其中在线时长我们在上一题中已经求得，因此只需求出订单量即可。

订单量的计算，会用到 “订单数据” 表，用 count(订单 id) 来计算。然后思路与上题一样，新司机在 “在线时长数据” 表中并没有，而是在 “司机数据” 表 中通过查询语句才能得到。

因此我们用两个表的联结，得到 8,9 月北京新司机的在线时长，然后再利用子查询，使用 count(订单 id) 得到总订单量。

sql 语句解析如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6iGHF7RddrF3YjBSv%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_23.png?alt=media\&token=3ef5746a-06d1-4a72-819a-9b6840932928)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6iSivZq4DwWzfRvBo%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_24.png?alt=media\&token=bebd51bd-e8f8-44df-be1d-dbd1133d442f)

因此，2020 年 8 月和 9 月，每个月的北京市新司机的 TPH = 订单量 / 在线时长 = 2/4=0.5。

对于老司机的司机数，在线时长以及 TPH，同理可得，只需要将 “新司机” 的条件 换成 “老司机” 即可，其他语句都不变。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6iYJXlsG67aUb-Zam%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_25.png?alt=media\&token=92c9e9a4-0009-48e1-9ab3-8d91f0715d7b)

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

**(1)** **司机数大于 20 的城市名称。**

司机数的计算用 count(司机 id)，用到的是 “司机数据” 表，城市名称在 “城市匹配数据”中，用表的联结。联结图如下。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6idu6_iMIvsF3vYK3%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_26.png?alt=media\&token=90b2d311-a8ed-43a5-a344-6e87c5de4eed)

sql 语句解析如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6inReRx4Fw9ISyKxb%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_27.png?alt=media\&token=766a4a66-40d8-46c6-a52c-403471a6b8b8)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6ix_dyO-BvgPjTNAW%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_28.png?alt=media\&token=340562e6-0d75-41d0-9ed6-aa348c379a5d)

**(2)** **司机总在线时长大于 2 小时城市名称。**

总在线时长用 sum(在线时长)来计算，用的是 “在线时长数据”表，而这个表中没有城市 id，因此我们需要先联结 “司机数据” 表，得到城市 id，再通过联结 “城市匹配数据” 表，得到对应的城市名称。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6j2S6iHAmtu0_KQsT%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_29.png?alt=media\&token=d64c02ef-9956-4c26-9bea-8b471c3f517f)

sql 语句解析如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6j7rWx6HBbLH1T-04%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_30.png?alt=media\&token=e37a79b1-58e9-4363-89ba-ada401b9bada)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6jCW8KZ8cpwKhSwPb%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_31.png?alt=media\&token=b5c47eeb-ca52-45cf-877e-9a9874372c04)

**(3) 订单量大于 1 的城市名称。**

订单量的计算用 count(订单 id)，乘客数的计算用 count(乘客 id)，用到的表为 “订单数据表”，而这个表中没有城市 id。

我们需要先通过 “司机数据” 表联结，得到对应的城市 id，在通过 “城市匹配数据” 表进行联结，得到相应的城市名称。

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6jK2Bt5n85sU5IZLL%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_32.png?alt=media\&token=b741c215-9cda-4881-82ce-d728b9b08fc4)

sql 语句解析如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6jOPVXX6dGz0KKlX9%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_33.png?alt=media\&token=b76d4969-2f73-493c-b309-59fac70969e0)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6jhVPU4IFHKGl8UY4%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_34.png?alt=media\&token=20823e25-5f5a-4c56-b852-6330ee37dcbc)

**(4) 乘客数大于 1 的城市名称。**

乘客数通过 count(乘客 id)来计算，用到的表为 “订单数据” 表，而这个表中并没有城市 id，所以我们需要联结 “司机数据”表来得到相应的城市 id，再通过 “城市匹配数据” 联结，得到相应的城市名称。

sql 语句解析如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6jqhUAVEJt1oAZpV7%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_35.png?alt=media\&token=47c321df-8a1c-42c1-8c0f-60a60def54da)

查询结果如下

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6juCnio7qG_COSoBb%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_36.png?alt=media\&token=0ca45685-7303-4b4a-a4a2-19e7a06c041f)

**【本题考点】**

1. 这次试题重点要考察的是表的联结。当题目中涉及到多个表之间的关系时，我们要找到多个表之间是通过什么条件关联的，然后进行多表关联。
2. 考查如何将复杂问题拆解为简单问题的能力，可以使用[逻辑树分析方法](http://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==\&mid=2649246563\&idx=2\&sn=3ffe509999d144d23dec5acc101fc2ef\&chksm=835fc353b4284a45ce01391453fe2fec1b225bbd6bbdb67dd7f304aacdd4f21f60d0b27ba309\&scene=21#wechat_redirect)。
3. 如何下载案例数据？

![](https://4109408004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTuZ3PxkXf2a7UbRybW%2F-MV6hVd3G9c8YcwXPItL%2F-MV6k1ktjN7rVn4Y3ITW%2F%E6%89%93%E8%BD%A6%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%88%86%E6%9E%90_37.png?alt=media\&token=3e010c8b-fcf6-493e-8072-ea4b41ea4025)

推荐：[如何从零学会 sql？](http://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==\&mid=2649247566\&idx=2\&sn=5af748b677eb72028764dde0577675fb\&chksm=835fc77eb4284e68e8cfe3f08c5a671b9e080b2651f20b40b1c793ffda4042ae43ad8f35a755\&scene=21#wechat_redirect)

![](https://mmbiz.qpic.cn/mmbiz_png/PnRVMhXvfFLIBubXLZVOOMBUS4hIgCM9NkHCauHjz0fOhvaA3TnJWx3N4njnLV1soStKCHq7msnOWNRiaHKBAsA/640?wx_fmt=png)
