题解 | #牛客的课程订单分析(五)#
牛客的课程订单分析(五)
http://www.nowcoder.com/practice/348afda488554ceb922efd2f3effc427
1、题目要求查出在
限制条件:(1)2025-10-15以后,(2)产品在('C++','Python','Java')中(3)状态为成功(4)同一个用户购买两次及以上 的
指标:
(1)用户id(2)前两次购买的日期(3)总购买次数;
2、前三个条件好写,统一放到where筛选语句后
where date>'2025-10-15'
and status='completed'
and product_name in ('C++','Python','Java')
3、使用窗口函数,同时计算出各用户的购买次数和购买行为的先后顺序,这里排序用的是row_number(),不重复排序,因为可能存在同一天买多件产品的情况。
row_number()over(partition by user_id order by date) rk,
count(*)over(partition by user_id) cnt
新建表c作为查询对象,表c包含了有用户id,日期,购买序号,总次数字段的满足前三个条件的所有购买记录
4、对表c进行查询,筛选条件为总次数大于2,购买序号为1,2的信息
5、最后根据要求排序
完整代码如下:
select user_id,min(date),max(date),cnt
from
(
select user_id,date,
row_number()over(partition by user_id order by date) rk,
count(*)over(partition by user_id) cnt
from order_info
where date>'2025-10-15'
and status='completed'
and product_name in ('C++','Python','Java')
) c
where c.cnt>=2
and rk in('1','2')
group by user_id
order by user_id