题解 | #多层子查询+开窗函数#

牛客的课程订单分析(五)

https://www.nowcoder.com/practice/348afda488554ceb922efd2f3effc427

SELECT
user_id,
qian first_buy_date,
date second_buy_date,
cnt
FROM
(
SELECT
user_id,
min(date) over(partition by user_id) qian,  要点二
date,
row_number() over(partition by user_id order by date ) paimin,
count(product_name) over(partition by user_id) cnt
FROM
order_info
WHERE user_id IN 要点一
(
SELECT
user_id
FROM
order_info
WHERE date>"2025-10-15"
AND product_name IN ("C++","Java","Python")
AND status="completed"
GROUP BY user_id
HAVING count(product_name)>1
)
AND date>"2025-10-15"
AND product_name IN ("C++","Java","Python")
AND status="completed"
) a
WHERE paimin=2

要点一:和以前的课程订单分析一样,先筛选出符合要求的user_id,再用where+子查询过滤,之所以这么麻烦,是因为使用Group by后只能输出被分组和在聚合函数里的字段

要点二:求多个最值问题,使用开窗排序函数+where筛选就好,为什么这里要计算最小值呢?

如果你观察表结构就会发现,第一次购买的日期和第二次购买的日期是出现在同一行的,上述方法用where无法实现分别筛选,同一行的日期都是一样的。

所以这里先把最小值算出来,再用开窗排序函数+where的方法找出第二次购买日期,这样就可以放在同一行了

全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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