题解 | #国庆期间近7日日均取消订单量#
国庆期间近7日日均取消订单量
https://www.nowcoder.com/practice/2b330aa6cc994ec2a988704a078a0703
-- 思路:
- -- 1.筛选出'2021-09-25' and '2021-10-03' 之间的订单记录
- -- 2.按日期分组统计每日的订单完成量和订单取消量
- -- 3.然后使用窗口函数sum()统计每天的近7日日均订单完成量和日均订单取消量,核心用法:
- -- rows between 6 preceding and current row表示窗口大小为7,
- -- 范围从当前行往前6行,包括当前行
- -- 4.最后取国庆前三天记录按照dt排序即可
-- 思路:
-- 1.筛选出'2021-09-25' and '2021-10-03' 之间的订单记录
-- 2.按日期分组统计每日的订单完成量和订单取消量
-- 3.然后使用窗口函数sum()统计每天的近7日日均订单完成量和日均订单取消量,核心用法:
-- rows between 6 preceding and current row表示窗口大小为7,
-- 范围从当前行往前6行,包括当前行
-- 4.最后取国庆前三天记录按照dt排序即可
with
t as (
select
date_format (r.event_time, '%Y-%m-%d') as dt,
o.order_id,
order_time,
start_time,
finish_time,
fare
from
tb_get_car_order o
join tb_get_car_record r on o.order_id = r.order_id
where
date_format (r.event_time, '%Y-%m-%d') between '2021-09-25' and '2021-10-03'
),
t1 as (
select
dt,
count(if (start_time is not null, order_id, null)) as day_finish_num,
count(if (start_time is null, order_id, null)) as day_cancel_num
from
t
group by
dt
),
t2 as (
select
dt,
round(
sum(day_finish_num) over (
rows between 6 preceding
and current row
) / 7,
2
) as finish_num_7d,
round(
sum(day_cancel_num) over (
rows between 6 preceding
and current row
) / 7,
2
) as cancel_num_7d
from
t1
)
select
dt,
finish_num_7d,
cancel_num_7d
from
t2
where
dt >= '2021-10-01'
order by
dt
SQL大厂面试题 文章被收录于专栏
牛客网sql大厂面试题题解~

