题解 | #牛客的课程订单分析(二)#

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

http://www.nowcoder.com/practice/4ca4137cb490420cad06d2147ae67456

  1. 解题思路:
    看题目要求:
    “请你写出一个sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程的user_id,并且按照user_id升序排序”
    我们来拆分里面的各种条件:
  • 看第一个就是查询时间要在 2025-10-15之后,我们很容易就想到需要一个WHERE来做条件筛选,转换成对应SQL语句👉 WHERE date > '2025-10-15';
  • 其次,同一个用户这句就代表我们要做分组操作,所以会用到 GROUP BY user_id;
  • 接着是下单2个以及2个以上的,这就说明分组的时候还有个筛选条件,这里就要用HAVING理。所以转换成SQL语句👉 HAVING COUNT(user_id) >= 2;
  • 然后这里说“状态为购买成功C++课程Java课程Python课程”,即表明有两个并列的条件筛选。这里放到WHERE语句中就是用AND来并列两个条件,转换成SQL语句👇
    AND status LIKE 'c%'
    AND product_name IN ('C++', 'Java', 'Python')

这里用LIKE语句进行字符串的匹配可以加快查询速度。

  • 最后按 user_id 升序排序,就很简单一句:ORDER BY user_id
  1. 参考答案
    最后我们按sql语句的查询顺序来合并上面的语句就得到最后的答案:
    SELECT user_id FROM order_info WHERE date > '2025-10-15' 
    AND status LIKE 'c%' 
    AND product_name IN ('C++', 'Java', 'Python')
    GROUP BY user_id HAVING COUNT(user_id) >= 2
    ORDER BY user_id;
MySQL题解 文章被收录于专栏

本专栏主要对各种经典的MySQL题进行解说,希望用最易懂简洁的语言帮助大家通关MySQL。

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
8
1
分享

创作者周榜

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