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

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

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

1.我们将问题简化,要求七日日均取消,只需要求出这七天每天的取消量,相加起来再除7即可。 因此我们先将每天的值求出

with t as 
(select date(order_time) as dt,count(start_time) as com,
count(order_time)-count(start_time) as ucom from  tb_get_car_order 
group by dt)

alt

2.求累加和使用sum()over(...rows n preceding)即可

select dt,round(sum(com)over(order by dt rows 6 preceding)/7,2) as fn,
round(sum(ucom)over(order by dt rows 6 preceding)/7,2) as fm
from t

alt

3.然后再取出国庆三天的结果即可。完整代码如下

with t as 
(select date(order_time) as dt,count(start_time) as com,
count(order_time)-count(start_time) as ucom from  tb_get_car_order 
group by dt)
select * from 
(select dt,round(sum(com)over(order by dt rows 6 preceding)/7,2) as fn,
round(sum(ucom)over(order by dt rows 6 preceding)/7,2) as fm
from t) as u 
where dt between '2021-10-01' and '2021-10-03'
order by dt

易错点:该题在日期的选择上一定要想清楚mysql的执行顺序,如果执行如下代码

select dt,round(sum(com)over(order by dt rows 6 preceding)/7,2) as fn,
round(sum(ucom)over(order by dt rows 6 preceding)/7,2) as fm
from t where between '2021-10-01' and '2021-10-03'
order by dt

则结果不正确。原因在于mysql中的where在select之前执行,如果先选择日期,那么除了这三天之外的其他记录其实都没有计算进来。因此我们需要再做一次子查询。

全部评论
代码有bug,虽然能过示例,但是如果7天里有某天没有订单,那么你的代码会返回错误的结果。
3 回复 分享
发布于 2022-06-16 17:53
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-20 17:19

相关推荐

05-26 09:07
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
05-12 17:28
已编辑
门头沟学院 硬件开发
ldf李鑫:不说公司名祝你以后天天遇到这样的公司
点赞 评论 收藏
分享
评论
18
收藏
分享

创作者周榜

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