- 解题思路:
看题目要求:
“请你写出一个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
- 参考答案
最后我们按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;