Write a SQL query to find the cancellation rate of requests with unbanned users (both client and driver must not be banned) each day between
The cancellation rate is computed by dividing the number of canceled (by client or driver) requests with unbanned users by the total number of requests with unbanned users on that day.
"2013-10-01"
and "2013-10-03"
.The cancellation rate is computed by dividing the number of canceled (by client or driver) requests with unbanned users by the total number of requests with unbanned users on that day.
Example:
Table: Trips:+----+-----------+-----------+---------+---------------------+------------+| Id | Client_Id | Driver_Id | City_Id | Status | Request_at |+----+-----------+-----------+---------+---------------------+------------+| 1 | 1 | 10 | 1 | completed | 2013-10-01 || 2 | 2 | 11 | 1 | cancelled_by_driver | 2013-10-01 || 3 | 3 | 12 | 6 | completed | 2013-10-01 || 4 | 4 | 13 | 6 | cancelled_by_client | 2013-10-01 || 5 | 1 | 10 | 1 | completed | 2013-10-02 || 6 | 2 | 11 | 6 | completed | 2013-10-02 || 7 | 3 | 12 | 6 | completed | 2013-10-02 || 8 | 2 | 12 | 12 | completed | 2013-10-03 || 9 | 3 | 10 | 12 | completed | 2013-10-03 || 10 | 4 | 13 | 12 | cancelled_by_driver | 2013-10-03 |+----+-----------+-----------+---------+---------------------+------------+Table: Users+----------+--------+--------+| Users_Id | Banned | Role |+----------+--------+--------+| 1 | No | client || 2 | Yes | client || 3 | No | client || 4 | No | client || 10 | No | driver || 11 | No | driver || 12 | No | driver || 13 | No | driver |+----------+--------+--------+Result:+------------+-------------------+| Day | Cancellation Rate |+------------+-------------------+| 2013-10-01 | 0.33 || 2013-10-02 | 0.00 || 2013-10-03 | 0.50 |+------------+-------------------+
Approach
Mysql
SELECT t.Request_at Day,round(sum(case when t.Status = 'completed' then 0 else 1 end) / count(*), 2) "Cancellation Rate"FROM Trips tINNER JOIN Users uON t.Client_Id = u.Users_Id AND u.Banned = 'No'WHERE t.Request_at BETWEEN '2013-10-01' AND '2013-10-03'GROUP BY t.Request_at
Oracle
SELECT t.Request_at Day,round(sum(case when t.Status = 'completed' then 0 else 1 end) / count(*), 2) "Cancellation Rate"FROM Trips tJOIN Users uON t.Client_Id = u.Users_Id AND u.Banned = 'No'WHERE t.Request_at BETWEEN '2013-10-01' AND '2013-10-03'GROUP BY t.Request_at
No comments:
Post a Comment