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

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

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

方法一:自己的笨拙办法,利用union连接三个表格,分别是9.25-10.1,9.26-10.2,9.27-10.3

select 
	'2021-10-01' as dt,
    round(sum(if(mileage>0,1,0))/7,2) as finish_num_7d,
    round(sum(if(mileage>0,0,1))/7,2) as rcancel_num_7d
from tb_get_car_order tco
left join tb_get_car_record tcr
on tco.order_id=tcr.order_id and tco.uid=tcr.uid
where date(end_time)>='2021-9-25' and date(end_time)<='2021-10-1'
union
select 
	'2021-10-02' as dt,
    round(sum(if(mileage>0,1,0))/7,2) as finish_num_7d,
    round(sum(if(mileage>0,0,1))/7,2) as rcancel_num_7d
from tb_get_car_order tco
left join tb_get_car_record tcr
on tco.order_id=tcr.order_id and tco.uid=tcr.uid
where date(end_time)>='2021-9-26' and date(end_time)<='2021-10-2'
union
select 
	'2021-10-03' as dt,
    round(sum(if(mileage>0,1,0))/7,2) as finish_num_7d,
    round(sum(if(mileage>0,0,1))/7,2) as rcancel_num_7d
from tb_get_car_order tco
left join tb_get_car_record tcr
on tco.order_id=tcr.order_id and tco.uid=tcr.uid
where date(end_time)>='2021-9-27' and date(end_time)<='2021-10-3'

方法二:参考别人的,先分别求出每个日期的订单完成和取消数量,再利用窗口函数(新知识)

  1. 窗口函数的移动值,‹窗口函数› over ( order by ‹用于排序的列名› rows <移动值> preceding )
  2. 每一行得到的结果,都是当前行前面‘移动值n’行的平均(共n+1行)。想要计算当前行与前n行(共n+1行)的平均时,只要调整rows…preceding中间的数字即可。
select *
from
(select
	dt,
    round(sum(finish) over ( rows 6 preceding)/7,2) as finish_num_7d,
	round(sum(cancal) over ( rows 6 preceding)/7,2) as cancel_num_7d
from
(select
	date(order_time) dt,
    sum(if(mileage>0,1,0)) as finish,
    sum(if(mileage>0,0,1)) as cancal
from tb_get_car_order
group by date(order_time)
order by dt)t1)t2
where dt between '2021-10-01' and '2021-10-03'





全部评论

相关推荐

MScoding:你这个实习有一个是当辅导老师,这个和找技术岗没有关系吧?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务