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

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

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

# 先计算每天的近7日平均订单完成量和日均订单取消量,按日期升序排序。
# 1.获取每天的订单完成数和订单取消数
with t1 as(
    select date(order_time) dt,
    sum(case when start_time is not null then 1 else 0 end) as finish_num,
    sum(case when start_time is null then 1 else 0 end) as cancel_num
    from tb_get_car_order 
    group by date(order_time)
    order by dt
),
# 2.对每天的聚合前6行也就是聚合每天的近7天的点歌单的完成量和订单的取消量,然后求平均,
t2 as(
    select dt,
    round(sum(finish_num) over(order by dt rows 6 preceding)/7,2) as finish_num_7d,
    round(sum(cancel_num) over(order by dt rows 6 preceding)/7,2) as cancel_num_7d
    from t1
)
select * from t2
where dt between '2021-10-01' and '2021-10-03'



遇到这种问题尽量使用cte分步骤的去算,这样逻辑更清晰

1.获取每天的订单完成数和订单取消数

2.通过聚合函数order by dt rows 6 preceding进行7天也就是7行聚合求平均

3.where子句的优先级高于select,因此要先选择聚合,后选择where,分两步执行

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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