簡體   English   中英

SQL 查詢以使用 WITH 查找在兩個日期之間發出的請求的取消率

[英]SQL query to find the cancellation rate of requests made between two dates using WITH

我試圖了解從兩個查詢中划分計數和的正確方法。

我正在自學 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;

這看起來對嗎? 注意我故意忽略了包括日期范圍,因為該表只有有限的條目。

我沒有看到 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 和一個帶有日期/時間的單獨列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM