题解 | #国庆期间近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-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 15:36
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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