首页 > 试题广场 >

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

[编程题]牛客的课程订单分析(三)
  • 热度指数:84014 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

有很多同学在牛客购买课程来学习,购买会产生订单存到数据库里

有一个订单信息表(order_info),简况如下:

id user_id product_name
status
client_id
date
1 557336
C++
no_completed
1 2025-10-10
2 230173543
Python
completed
2 2025-10-12
3 57 JS
completed
3 2025-10-23
4 57 C++
completed
3 2025-10-23
5 557336
Java
completed
1 2025-10-23
6 57 Java
completed
1 2025-10-24
7 557336
C++
completed
1 2025-10-25

1行表示user_id557336的用户在2025-10-10的时候使用了client_id1的客户端下了C++课程的订单,但是状态为没有购买成功。

2行表示user_id230173543的用户在2025-10-12的时候使用了client_id2的客户端下了Python课程的订单,状态为购买成功。

。。。

最后1行表示user_id557336的用户在2025-10-25的时候使用了client_id1的客户端下了C++课程的订单,状态为购买成功。

请你写出一个sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程的订单信息,并且按照order_infoid升序排序,以上例子查询结果如下:


id user_id product_name
status
client_id
date
4 57 C++
completed
3 2025-10-23
5 557336 Java completed 1 2025-10-23
6 57 Java completed 1 2025-10-24
7 557336 C++ completed 1 2025-10-25

解析:

id为46的订单满足以上条件,输出它们的对应的信息;

id为57的订单满足以上条件,输出它们的对应的信息;

按照id升序排序

示例1

输入

drop table if exists order_info;
CREATE TABLE order_info (
id int(4) NOT NULL,
user_id int(11) NOT NULL,
product_name varchar(256) NOT NULL,
status varchar(32) NOT NULL,
client_id int(4) NOT NULL,
date date NOT NULL,
PRIMARY KEY (id));

INSERT INTO order_info VALUES
(1,557336,'C++','no_completed',1,'2025-10-10'),
(2,230173543,'Python','completed',2,'2025-10-12'),
(3,57,'JS','completed',3,'2025-10-23'),
(4,57,'C++','completed',3,'2025-10-23'),
(5,557336,'Java','completed',1,'2025-10-23'),
(6,57,'Java','completed',1,'2025-10-24'),
(7,557336,'C++','completed',1,'2025-10-25');

输出

4|57|C++|completed|3|2025-10-23
5|557336|Java|completed|1|2025-10-23
6|57|Java|completed|1|2025-10-24
7|557336|C++|completed|1|2025-10-25
头像 此用户名涉嫌违规
发表于 2021-03-22 14:35:48
题目描述:sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程的订单信息,并且按照order_info的id升序排序。个人思路:与(二)几乎一样。不过的是因为要显示的所有信息因此不能直接使用group by后的结果。方法一 展开全文
头像 玉面小fei龙
发表于 2021-08-22 00:57:53
这样比较容易理解! SELECT * from order_info WHERE user_id in( SELECT user_id from order_info group by user_id HAVING count(*) 展开全文
头像 高质量搬砖人
发表于 2021-04-02 14:18:27
写的有点复杂... 和78做法类似,但是要列出所有的信息,不能使用group by 先来看条件:#在2025-10-15以后#同一个用户下单2个以及2个以上#状态为购买成功#C++课程或Java课程或Python课程#按照order_info的id升序排序 select o.id, o.user_i 展开全文
头像 SunburstRun
发表于 2021-02-26 16:25:40
通过https://blog.nowcoder.net/n/87066a468fdd45e1b8f091e76e3854cb我们可以写出如下代码: select user_id from order_info where date>'202 展开全文
头像 jiang_dr
发表于 2021-11-17 09:24:52
思路:与订单分析二类似 不同的地方是,这里的排序方式是通过 id 来进行排序,而且需要返回的字段是表中全部字段。 故此我们可以先通过订单分析二中的方法获取到购买数量大于等于2 user_id,再联立 order_info 表查出所有数据,但此时需要注意的是,还需要再进行一次如下判断: and sta 展开全文
头像 杰锅
发表于 2021-06-14 01:08:10
【窗口函数+聚合函数的使用误解】在评论区@牛客786785856号 :大佬好,我有个疑问,窗口函数聚合的用法不是累计的效果么,为啥这题会出现聚合的效果😮 很多人认 窗口函数+聚合函数 是累计的效果。-----这句话在加了order by条件时候是正确的,但若不加order by条件其实和group 展开全文
头像 诗云panther
发表于 2021-08-11 19:16:29
select o.id, o.user_id, o.product_name, o.status, o.client_id, o.datefrom order_info ojoin(select id, user_id, product_name, status, client_id, datefr 展开全文
头像 阿蘭
发表于 2021-12-05 16:04:31
方法一:基于订单分析(二) 原创:https://blog.nowcoder.net/n/d31d9107fe2f4f68bdf3e9edac6f1954?f=comment 不同的地方是,这里的排序方式是通过 id 来进行排序,而且需要返回的字段是表中全部字段。 故此我们可以先通过订单分析二中的方 展开全文
头像 newbee松
发表于 2021-07-11 16:57:54
select t.id,t.user_id,t.product_name,t.status,t.client_id,t.datefrom(select , count() over(partition by user_id) as numfrom order_infowhere product_na 展开全文
头像 牛萍萍
发表于 2021-09-18 14:31:54
select * from order_info where id in (select if (count(user_id) over(partition by user_id) >= 2, id, 0) from order_info where date >= '202 展开全文