行程和用户

简介: 行程和用户

公众号merlinsea


  • leetcode链接地址
  • 题目介绍
  • Trips表
  • id 是这张表的主键。这张表中存所有出租车的行程信息。每段行程有唯一 id ,其中 client_id 和 driver_id 是 Users 表中 users_id 的外键。status 是一个表示行程状态的枚举类型,枚举成员为(‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’) 。


+-------------+----------+
| Column Name | Type     |
+-------------+----------+
| id          | int      |
| client_id   | int      |
| driver_id   | int      |
| city_id     | int      |
| status      | enum     |
| request_at  | date     |     
+-------------+----------+


  • Users表
  • users_id 是这张表的主键。这张表中存所有用户,每个用户都有一个唯一的 users_id ,role 是一个表示用户身份的枚举类型,枚举成员为 (‘client’, ‘driver’, ‘partner’) 。banned 是一个表示用户是否被禁止的枚举类型,枚举成员为 (‘Yes’, ‘No’) 。


+-------------+----------+
| Column Name | Type     |
+-------------+----------+
| users_id    | int      |
| banned      | enum     |
| role        | enum     |
+-------------+----------+
  • 取消率 的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)。写一段 SQL 语句查出 "2013-10-01" 至 "2013-10-03" 期间非禁止用户(乘客和司机都必须未被禁止)的取消率。非禁止用户即 banned 为 No 的用户,禁止用户即 banned 为 Yes 的用户。返回结果表中的数据可以按任意顺序组织。其中取消率 Cancellation Rate 需要四舍五入保留 两位小数 。
  • 思路
  • 第一步:将trips表和users表进行leftjoin找到所有司机和乘客是否是被禁止状态,通过client_id 和user_id进行关联,以及driver_id和user_id进行关联


select trips.*,cu.*,du.*
from trips left join users cu on trips.client_id=cu.users_id
left join users du on trips.driver_id = du.users_id

640.png


  • 第二步:由于需要求出10.1号到10.3号每一天的取消率,因此需要将结果按照时间进行分组,并挑选出10.1号到10.3号的分组结果


# 计算非禁止用户的订单【10.1 - 10.3 每一天】
select trips.request_at,count(*) cnt
from trips left join users cu on trips.client_id=cu.users_id
left join users du on trips.driver_id = du.users_id
where cu.banned = 'No' and du.banned = 'No'
group by request_at
having request_at>='2013-10-01' and request_at<='2013-10-03'
| request_at | cnt |
| ---------- | --- |
| 2013-10-01 | 3   |
| 2013-10-02 | 2   |
| 2013-10-03 | 2   |
# 被司机或乘客取消的非禁止用户生成的订单数量
select trips.request_at,count(*) cnt
from trips left join users cu on trips.client_id=cu.users_id
left join users du on trips.driver_id = du.users_id
where cu.banned = 'No' and du.banned = 'No' and (trips.status = 'cancelled_by_client' or trips.status='cancelled_by_driver')
group by request_at
having request_at>='2013-10-01' and request_at<='2013-10-03'
| request_at | cnt |
| ---------- | --- |
| 2013-10-01 | 1   |
| 2013-10-03 | 1   |


  • sql实现


select tmp1.request_at 'Day', round(ifnull(tmp2.cnt,0) / tmp1.cnt,2) 'Cancellation Rate'
from (
  #分母
  select trips.request_at,count(*) cnt
  from trips left join users cu on trips.client_id=cu.users_id
  left join users du on trips.driver_id = du.users_id
  where cu.banned = 'No' and du.banned = 'No'
  group by request_at
  having request_at>='2013-10-01' and request_at<='2013-10-03'
) tmp1 left join(
  #分子
  select trips.request_at,count(*) cnt
  from trips left join users cu on trips.client_id=cu.users_id
  left join users du on trips.driver_id = du.users_id
  where cu.banned = 'No' and du.banned = 'No' and (trips.status = 'cancelled_by_client' or trips.status='cancelled_by_driver')
  group by request_at
  having request_at>='2013-10-01' and request_at<='2013-10-03'
 ) tmp2 on tmp1.request_at = tmp2.request_at
相关文章
|
9月前
|
数据采集 XML JSON
获取携程网站上指定景点的用户评论数据
获取携程网站上指定景点的用户评论数据
424 0
|
8月前
|
存储 数据库
控制台实现简单的家庭收支记录软件
控制台实现简单的家庭收支记录软件
控制台实现简单的家庭收支记录软件
|
4月前
|
数据挖掘 定位技术
出租车GPS轨迹、社交软件签到、手机信令数据下载网站整理
出租车GPS轨迹、社交软件签到、手机信令数据下载网站整理
120 2
|
5月前
leetcode1109 航班预订统计
leetcode1109 航班预订统计
33 0
|
小程序
L2-034 口罩发放 (25 分)(模拟)
L2-034 口罩发放 (25 分)(模拟)
385 0
LeetCode 1109. 航班预订统计
这里有 n 个航班,它们分别从 1 到 n 进行编号。
80 0
J3
快捷餐饮之店家后台菜品分类及菜品管理实现
快捷餐饮之店家后台菜品分类及菜品管理实现
J3
149 0
快捷餐饮之店家后台菜品分类及菜品管理实现
|
定位技术 API
如何获取停车缴费的录入停车场信息接口的parking_poiid高德地图唯一标识
说明: 本帖是介绍如何获取停车缴费的录入停车场信息接口的parking_poiid参数高德地图唯一标识,仅供参考!! 录入停车场信息接口文档:查看  方法一: 直接使用访问高德地图url([url]https://ditu.
1994 0
口碑店铺数据-(回传商户操作行为信息,回传用户操作行为信息)
官方文档  说明: 本帖是利用支付宝正式环境测试账号测试口碑店铺数据接口,请求中根据文档传入了必传参数,大家可以配置自己的环境,根据自己的需求严格按照文档要求添加相关的可选参数,此demo仅供参考        测试环境:Eclipse+JDK1.6及以上+Tomcat6.0及以上         为提升用户使用口碑店铺插件服务的体验,各插件在为用户提供服务的同时,需将相关的数据同步到口碑,口碑会通过更多的入口和统一的样式展示给用户。
430 0

热门文章

最新文章