SQL 262. Processes and Users

SQL 262. Processes and Users

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;

Guess you like

Origin blog.csdn.net/qq_44226094/article/details/130067076
Recommended