0

我试图了解从两个查询中划分计数和的正确方法。

我正在自学sql并在线练习。
问题:

编写 SQL 查询以查找 2017-08-01 和 2017-08-03 之间发出的请求的取消率。取消率是通过将取消的请求数除以每天的总乘车次数得出的。结果表应该有 2 列,即显示每一天的 Day 和提供当天取消率的 Cancellation Rate。
表是:
在此处输入图像描述 我尝试的是:

  1. 计算每个日期的取消乘车率
  2. 计算每个日期的所有乘车请求
  3. 除以每个日期的计数
     with  
    cancelled_rides as 
    (select count(*) cancel_count, status, Request_id 
    from TRIPS 
    where status = 'cncld_driver' 
    group by state, Request_id)
     
    all_rides as ( 
    select count(*) day_count, status, Request_id 
    from TRIPS 
    group by state, Request_id) ,
     
    select cancelled_rides.Request_id as DAY, 
    (cancelled_rides.cancel_count/all_rides.day_count) as 'Cancellation Rate' 
    FROM cancelled_rides, all_rides;

这看起来对吗?注意我故意忽略了包括日期范围,因为该表只有有限的条目。

4

1 回答 1

1

我没有看到 CTE 对这个查询有任何帮助。只需使用条件聚合:

select t.Request_id as day, count(*) as total,
       sum( status = 'cncld_driver' ) as num_cancelled, 
       avg( status = 'cncld_driver' ) as cancellation_rate
from trips t
where request_id >= '2017-08-01' and 
      request_id < '2017-08-04'
group by request_id;

调用日期“request_id”相当混乱。您应该有一个对每一行都是唯一的请求 ID 和一个带有日期/时间的单独列。

于 2020-04-25T20:11:29.303 回答