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

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

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

select *
from(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(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) t ) a 
where dt between '2021-10-01' and '2021-10-03'

全部评论
这算法要是有一天的数据是空的就错了吧
3 回复 分享
发布于 2022-08-21 16:48 广东
想问一下前面在18题的时候没有答案用rows 6 preceding,是不是如果天数不是连续的比如9月28没有记录是不是就不能用
2 回复 分享
发布于 2022-03-06 17:51
为什么最后要加SELECT * 啊?
1 回复 分享
发布于 2021-12-13 17:05
这里只计算了用户下单以后,司机接单后才取消的订单量,司机接单之前用户取消的订单不需要计算吗?
1 回复 分享
发布于 2022-07-05 16:44
使用range更严谨,避免过去一天没有数据。avg(finish_num)over(order by dt range INTERVAL 6 DAY PRECEDING)
1 回复 分享
发布于 2022-07-24 15:51
大佬,你可以用你窗口函数做出第18题嘛?
点赞 回复 分享
发布于 2022-04-30 19:00
select t.order_time, round(sum(if(tb_get_car_order.start_time is null,0,1))/7,2)as finish_num_7d, round(sum(if(tb_get_car_order.start_time is null,1,0))/7,2) as cancel_num_7d from (select date(order_time) as order_time, count(start_time) as finishi_cnt, sum(if(start_time is null,1,0)) as unfinishi_cnt from tb_get_car_order group by date(order_time)) as t left outer join tb_get_car_order on datediff(t.order_time,date(tb_get_car_order.order_time)) BETWEEN 0 and 6 where t.order_time BETWEEN '2021-10-01' and '2021-10-03' group by t.order_time;
点赞 回复 分享
发布于 2022-07-14 15:54
请问为什么使用sum(finish_num)over(order by dt rows between INTERVAL 6 DAY PRECEDING and current row )就报错了呢
点赞 回复 分享
发布于 2023-02-12 16:50 广东
大佬,这个答案放进去不对啊
点赞 回复 分享
发布于 2024-11-05 21:05 广东

相关推荐

评论
32
4
分享

创作者周榜

更多
牛客网
牛客企业服务