题解 | #国庆期间近7日日均取消订单量#

国庆期间近7日日均取消订单量

https://www.nowcoder.com/practice/2b330aa6cc994ec2a988704a078a0703

题目主要是考察连接on条件的运用

需要注意的是,题目本身考虑的是订单的取消,所以实际上根本用不到用户订车记录

所以司机接单之前的取消不算在内(如果考虑了乘客在接单前取消订单,会导致有一个用例不一致)

with tb_log as
         (
             select
                    date(end_time) order_dt,
                    isnull(start_time) or null 'if_cancel'
			-- 如果要考虑乘客在司机接单前取消的情况,只需要把这里的left join替换成right即可
             from tb_get_car_order
                      left join tb_get_car_record using (order_id)
         )

select dt,
       round((count(1) - sum(if_cancel)) / 7, 2)  finish_num_7d,
       round(sum(if_cancel) / 7, 2) cancel_num_7d
from tb_log
    right join
    (
    select distinct order_dt dt from tb_log where order_dt between '2021-10-01' and '2021-10-03'
    ) tb_dt on order_dt between date_sub(dt, interval 6 day ) and dt
group by dt
order by dt;

当然了还有更简单的题解方式

select dt,
       round((count(1) - sum(if_cancel)) / 7, 2)  finish_num_7d,
       round(sum(if_cancel) / 7, 2) cancel_num_7d
from 

(
	select distinct date(order_time) dt 
	from tb_get_car_order 
	where order_dt between '2021-10-01' and '2021-10-03'  
) tb_dt 

left join 

(
	select date(order_time) order_dt,
		   isnull(start_time) or null 'if_cancel'
	from tb_get_car_order
) tb_log

on order_dt between date_sub(dt, interval 6 day ) and dt
group by dt
order by dt;


全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务