Правильный способ рассчитать процент от? - PullRequest
2 голосов
/ 07 марта 2020

Я пытаюсь выяснить, как правильно рассчитать% в sql на основе следующего вопроса:

Предположим, есть два вида поставок: «Немедленная» и «Запланированная». Доставка считается «Немедленной», если запрошенное время доставки находится в пределах часа с момента создания доставки, в то время как «Запланированная», если она превышает час. Какой процент от общего объема поставок является «Немедленным»?

Table name: deliveries

delivery_id                 int        
order_created_at            timestamp  
predicted_store_pickup_time timestamp  
actual_store_pickup_at      timestamp  
requested_delivery_time     timestamp  
dasher_id                   int        
restaurant_id               int        
consumer_id                 int

У меня есть что-то вроде ниже, но я не уверен, есть ли более эффективный способ рассчитать это?

 with immediate as (
select *
from deliveries
where datediff(hour, order_created_at, requested_delivery_time) <= 1

)

select count(i.*) / count(d.*) as ratio
from immediate i
full outer join deliveries d
on i.delivery_id = d.delivery_id

1 Ответ

0 голосов
/ 07 марта 2020

Я бы использовал avg():

select 
    avg(
        case 
            when requested_delivery_time <= order_created_at + interval '1' hour
            then 1.0
            else 0
        end
    ) on_time_ratio
from deliveries
...