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

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

https://www.nowcoder.com/practice/4ae8cff2505f4d7cb68fb0ec7cf80c57

题目描述

我们有一个表:

  • order_info:包含订单信息,包括订单ID id、用户ID user_id、产品名称 product_name、订单状态 status、客户端ID client_id 和订单日期 date

目标是查询出在2025年10月15日之后,同一个用户下单2个及以上状态为“completed”的“C++”、“Java”或“Python”课程订单的信息,并按订单ID升序排序。

知识点

  • 条件过滤:使用WHERE子句筛选符合条件的记录。
  • 窗口函数:使用COUNT窗口函数计算每个用户的订单数量。
  • 排序:使用ORDER BY子句按订单ID升序排列结果。

关键问题分析

1. 筛选符合条件的订单

我们需要筛选出状态为“completed”的订单,产品名称为“C++”、“Java”或“Python”,并且订单日期在2025年10月15日之后:

where status = 'completed' and product_name in ('C++','Java','Python') and date > '2025-10-15'

2. 计算每个用户的订单数量

我们使用COUNT窗口函数计算每个用户的订单数量:

count(*) over(partition by user_id) as cnt
  • COUNT(*) OVER (PARTITION BY user_id) AS cnt: 计算每个用户的订单数量。

COUNT(*):普通聚合函数,用于计算整个表或分组的行数,必须与 GROUP BY 子句一起使用,否则不能与非聚合列一起使用。

COUNT(*) OVER (...):窗口函数,用于在一组行上执行聚合计算,同时保留每一行的细节,可以与非聚合列一起使用,不会违反 ONLY_FULL_GROUP_BY 模式。

类似用法题目考试分数(五)

3. 筛选订单数量大于等于2的用户

我们通过WHERE子句筛选出订单数量大于等于2的用户:

where cnt >= 2

4. 排序输出

我们按订单ID升序排列输出结果:

order by id

完整代码

select id, user_id, product_name, status, client_id, date
from (
    select
        id, user_id, product_name, status, client_id, date,
        count(*) over(partition by user_id) as cnt
    from order_info
    where status = 'completed' and product_name in ('C++','Java','Python') and date > '2025-10-15'
) sub
where cnt >= 2
order by id;
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:06
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 16:46
今天本来好好的,结果带教老师当着众人的面,直接大声叫我的名字,我过去还没站稳,劈头盖脸就是一句:“你这搞的什么玩意啊!没带脑子上班吗”那语气、那眼神,仿佛我做了什么十恶不赦的大事。我到底干啥了?不过是一些小疏漏,谁刚开始实习不会犯错啊?可她倒好,不仅不耐心指导,还这样贬低我。我满心的热情和期待,瞬间被浇了个透心凉🥶我也是爹妈疼爱的宝贝,来实习是为了学习、成长,不是来被人随意羞辱的!真心希望遇到的带教老师能多些耐心和善意,毕竟谁都有从零开始的时候,这样的“教育”方式,真的只会让人越来越没自信
longerluck...:前几年实习(初创公司),我们老板每月不固定会举行会议,叫我们几个实习生谈一下生活看到或听到的一些事情,并给出看法,当时我就正常讲了下我所见到的,没有个人看法,老板直接当着众人的面骂了我,那时候我真是感觉尴尬的要死(毕竟还有其他正式员工在)后面没待多久我就提出离职(因为当时我还负责一个项目),我leader叫我不要走,说给我涨工资,我反正觉得这种公司我是待不下去了,官味太重了,最后我还是跑路
实习吐槽大会
点赞 评论 收藏
分享
05-21 15:47
门头沟学院 Java
浪漫主义的虹夏:项目有亮点吗,第一个不是纯玩具项目吗,项目亮点里类似ThreadLocal,Redis储存说难听点是花几十分钟绝大部分人都能学会,第二个轮子项目也没体现出设计和技术,想实习先沉淀,好高骛远的自嗨只会害了自己
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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