ROUND(X,D) -- 表示将值 X 四舍五入为小数点后 D 位的数值,D 为小数点后小数位数。
t1.Banned = 'No' //该用户未被禁止
Request_at BETWEEN '2013-10-01' AND '2013-10-03' // 题目要求的时间范围
round(sum(if(Status like 'ca%', 1, 0)) / count(*), 2) // 对得到的值保留小数点后两位,利用 if sum 进行计数,就可以算得取消率
select Request_at DAY,
round(sum(if(Status like 'ca%', 1, 0)) / count(*), 2) 'Cancellation Rate'
from Trips t inner join Users t1 on t.Client_Id = t1.Users_Id
where t1.Banned = 'No' AND (Request_at BETWEEN '2013-10-01' AND '2013-10-03')
GROUP BY t.Request_at;
Trips
表中存所有出租车的行程信息。每段行程有唯一健 Id,Client_Id 和 Driver_Id 是Users
表中 Users_Id 的外键。Status 是枚举类型,枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。Users
表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,Role 则是一个表示(‘client’, ‘driver’, ‘partner’)的枚举类型。写一段 SQL 语句查出 2013年10月1日 至 2013年10月3日 期间非禁止用户的取消率。基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。
mysql
解决这题得知道以下几个。
t1.Banned = 'No' //该用户未被禁止
Request_at BETWEEN '2013-10-01' AND '2013-10-03' // 题目要求的时间范围
round(sum(if(Status like 'ca%', 1, 0)) / count(*), 2) // 对得到的值保留小数点后两位,利用 if sum 进行计数,就可以算得取消率