【Mysql】sql语句查询在2025-10-15以后,同一个用户下。。。

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

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

题目描述:sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程的user_id,并且按照user_id升序排序。

select user_id
from order_info
where datediff(date,"2025-10-15")>0
  and status ="completed"
  and product_name in("C++","Java","Python")
group by user_id
having count(id)>=2
order by user_id

按题意一步一步写条件即可。
注意where子句常见错误之一:
where子句中不能使用聚合函数,聚合函数可以在select,having,order by之后出现。
where指定分组之前数据行的条件,having子句用来指定分组之后条件。
所以下面这条语句是错误的:

select user_id
from oder_info
where datediff(date,"2025-10-15")>0
  and count(id)>=2
  and status ="completed"
  and product_name in ("C++","Java","Python")
group by user_id
order by user_id
牛客题霸-SQL篇【Mysql】 文章被收录于专栏

少壮不努力,老大勤刷题

全部评论
请教为什么不可以直接用date>'2025-10-15'而是datediff(date,"2025-10-15")>0呢?
1 回复 分享
发布于 2021-10-31 20:27
为什么group by client_id 不对呢?
点赞 回复 分享
发布于 2021-10-11 19:09
client_id是设备id哦,这里使用 group by user_id是对用户id进行分组
点赞 回复 分享
发布于 2021-10-11 19:38
好的,感谢
点赞 回复 分享
发布于 2021-10-11 22:17
应该count(user_id)吧?
点赞 回复 分享
发布于 2021-12-25 22:37
count(id)>=2应该放在having条件下才对
点赞 回复 分享
发布于 2023-03-24 21:30 湖北
最后count 那里错了 应该是count(user_id)才对 而且我也提交正确了
点赞 回复 分享
发布于 07-11 17:25 广东
#首先先把购买2门课程以上的用户id筛选出来,在利用外查询选取在子查询中的ID,并外查询中对用户ID去重 select distinct(user_id) from order_info o1 where user_id in (select user_id from order_info o2 where o1.user_id = o2.user_id group by o2.user_id having count(status) >=2) order by user_id asc;
点赞 回复 分享
发布于 07-14 23:49 北京

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
25 2 评论
分享
牛客网
牛客企业服务