题解 | #牛客的课程订单分析(四)#
牛客的课程订单分析(四)
http://www.nowcoder.com/practice/c93d2079282f4943a3771ca6fd081c23
问题:请你写出一个sql语句查询在2025-10-15以后,如果有一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程,那么输出这个用户的user_id,以及满足前面条件的第一次购买成功的C++课程或Java课程或Python课程的日期first_buy_date,以及购买成功的C++课程或Java课程或Python课程的次数cnt,并且输出结果按照user_id升序排序
问题拆解:1.按照上一题的答案,写出满足三个条件并且下单为2次及以上的user_id
2.从order_info表格中提取字段,设置筛选条件让user_id在步骤1范围内,并且也满足三个条件;
3.从步骤2中新生成的表格中提取需要的字段,按照user_id分组,取日期最小值(第一个日期),分组之后记一下数就是需要的cnt结果;
4.常规排序;
以上。
SELECT user_id, min(date) AS first_buy_date, count(*) AS cnt FROM
(SELECT * FROM order_info
WHERE user_id IN
(SELECT user_id FROM order_info
WHERE date>'2025-10-15'
AND status = 'completed'
AND product_name in ('C++', 'Java', 'Python')
GROUP BY user_id
HAVING count(*)>=2)
AND date>'2025-10-15'
AND status = 'completed'
AND product_name in ('C++', 'Java', 'Python')
ORDER BY user_id
) re
GROUP BY user_id
ORDER BY user_id