Topic: https://leetcode.cn/problems/trips-and-users/
data
Create table If Not Exists Trips (
id int,
client_id int comment '乘客',
driver_id int comment '司机',
city_id int,
status varchar(50) comment '行程状态',
request_at varchar(50)
)
Create table If Not Exists Users (
users_id int,
banned varchar(50) coment '是否被禁止',
role varchar(50) comment '用户身份'
)
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('1', '1', '10', '1', 'completed', '2013-10-01');
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('2', '2', '11', '1', 'cancelled_by_driver', '2013-10-01');
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('3', '3', '12', '6', 'completed', '2013-10-01');
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('4', '4', '13', '6', 'cancelled_by_client', '2013-10-01')
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('5', '1', '10', '1', 'completed', '2013-10-02')
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('6', '2', '11', '6', 'completed', '2013-10-02')
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('7', '3', '12', '6', 'completed', '2013-10-02')
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('8', '2', '12', '12', 'completed', '2013-10-03')
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('9', '3', '10', '12', 'completed', '2013-10-03')
insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('10', '4', '13', '12', 'cancelled_by_driver', '2013-10-03')
insert into Users (users_id, banned, role) values ('1', 'No', 'client');
insert into Users (users_id, banned, role) values ('2', 'Yes', 'client');
insert into Users (users_id, banned, role) values ('3', 'No', 'client');
insert into Users (users_id, banned, role) values ('4', 'No', 'client');
insert into Users (users_id, banned, role) values ('10', 'No', 'driver');
insert into Users (users_id, banned, role) values ('11', 'No', 'driver');
insert into Users (users_id, banned, role) values ('12', 'No', 'driver');
insert into Users (users_id, banned, role) values ('13', 'No', 'driver');
need
Find the cancellation rate for non-banned users (both passengers and drivers must not be banned) from '2013-10-01' to '2013-10-03'
- Calculation of cancellation rate: (number of orders generated by non-banned users canceled by drivers or passengers) / (total number of orders generated by non-banned users)
- Non-banned users are users whose banned is No
- Banned users are users whose banned is Yes
- Cancellation Rate Cancellation Rate needs to be rounded to two decimal places
search result :
| Day | Cancellation Rate |
| 2013-10-01 | 0.33 |
| 2013-10-02 | 0.00 |
| 2013-10-03 | 0.50 |
solve
-- 非禁止
with t1 as (
select users_id
from Users
where banned = 'No'
),
-- 非禁止的乘客
t3 as (
select client_id,
driver_id,
status,
request_at
from Trips t2 join t1
on t2.client_id = t1.users_id
where request_at >= '2013-10-01' and request_at <= '2013-10-03'
),
-- 非禁止的司机
t4 as (
select status,
request_at
from t3 join t1
on t3.driver_id = t1.users_id
)
-- 取消率
select request_at as `Day`,
round(avg(status != 'completed'), 2) as 'Cancellation Rate'
from t4
group by request_at;