题解 | SQL280 牛客的课程订单分析(五)

WITH t1 AS (
    -- 第一步,先筛选出日期范围内的数据,并且购买状态是成功
	SELECT
    	user_id,
    	product_name,
    	`date`
    FROM order_info
    WHERE `date` > '2025-10-15'
    AND status = 'completed'
    AND product_name IN ('C++','Python','Java')
),
t2 AS (
	-- 第二步,在再求出用户下单次数 >= 2
    SELECT
    	user_id,
        count(user_id) AS cnt
    FROM t1
    GROUP BY user_id
    HAVING count(user_id) >= 2
),
t3 AS (
	-- 第三步,在第一步基础上筛选第二步数据并且进行row_number
    SELECT
    	user_id,
    	product_name,
    	`date`,
    	ROW_NUMBER()
    		OVER(PARTITION BY user_id ORDER BY `date` ASC
            ) AS ranking
    FROM t1
    WHERE user_id IN (SELECT user_id FROM t2)
),
t4 AS (
	-- 第四步,找出左半表,用户id及第一次购买时间
    SELECT
    	user_id,
    	`date` AS first_buy_date
    FROM t3
    WHERE ranking = 1
),
t5 AS (
	-- 第五步,找出中半表,用户id及第二次购买时间
    SELECT
    	user_id,
    	`date` AS second_buy_date
    FROM t3
    WHERE ranking = 2
),
t6 AS (
	-- 第六步,进行数据表关联
    SELECT
    	t4.user_id,
    	t4.first_buy_date,
    	t5.second_buy_date,
    	t2.cnt
    FROM t4
    LEFT JOIN t5
    ON t4.user_id = t5.user_id
    LEFT JOIN t2
    ON t4.user_id = t2.user_id
    ORDER BY t4.user_id ASC
)
SELECT * FROM t6;

全部评论

相关推荐

1. 自我介绍2. 项目介绍3. 项目排查思路4. 功能测试需要注意的点5. 说一下你做压测的流程6. 测试期间用到了哪些工具7. Linux系统中去查看内存的命令8. 刚才你有说性能优化排查,那么有一个常见的思路就是去看一下JVM里面的GC情况(这块真慌了,因为我在项目中基本上只考虑到了MySQL的一些排查优化,没考虑JVM,所以说下面JVM相关的东西基本上是乱答了)你先说一下在项目调优过程中会用到的命令,比如说想看一下JVM中的一个GC的情况这样9. jstat和jmap的区别10. jmap有没有了解11. 查看GC情况可以用到哪些工具(这里面试官应该是希望我用过VisualVM)12. 怎么去查看日志,可以用什么工具13. 有没有做数据分片?14. 我见你项目中都用到了Redis,问一下你在Redis中都去存放了什么数据15. 比如说有一个排行榜的功能,你会用什么Redis数据类型16. 你知道有序集合的底层实现吗17. 比如说现在有一个top10的一个界面实现,体现在代码层面上,你是会先自己进行一个排序,然后塞到10这个框内,还是说会在10的里面不断进行动态排序呢?18. 我见你还做了一个电商的项目,你的项目中有热key这个问题吗19. 大概是一种什么现象,会带来哪些问题20. 怎么去解决热Key问题(我的回答偏向于缓存方面,面试官更希望是分片集群方面)21. 我见你其实在简历上说自己考虑到了这个主从模式了,能说一下具体怎么做的吗,怎么去考虑负载均衡这个问题22. 有了解集群模式吗23. 你在做测试的时候是在做黑盒测试还是白盒测试24. 测试过程中是测试单个接口还是说去测试整个链路(分情况考虑)25. 如果是整个链路的测试,你可能会关注哪方面,性能还是什么?26. 你这个是一个Java项目嘛,想知道一下你们在做测试的时候,怎么去看测试日志,是自己做了一个日志系统还是说去后端服务器上看27. Java日志的存放位置28. 查看日志怎么去看(想考察一下tail,less等以及grep、awk、sed这些命令的使用)29. 给一个场景:有一个功能测试的场景,在发起一个请求之后,发现这个接口特别的慢,在一个真实的线上系统中,我们的项目并不是依靠单一的服务,而是依靠层层依赖的微服务去实现的(这里吓懵逼了,没学过微服务)调用的接口不止是线上看到的那一个,底层可能调用到了很多接口,这个时候要怎么去排查解决慢接口问题30. 接口有时候传递参数是动态的,底层的业务逻辑可能会很复杂,有的时候你换了个参数,这个接口的反馈速度就不同了,现在你想查一下这个请求到底干了什么事情,链路到底是怎么实现的,你会去怎么分析31. 出了一个MySQL语句,用到了索引和分页,问这个语句在执行器中的执行顺序、有没有用到索引、用到的是哪个索引、这个索引为这个语句返回了什么内容、异步之后执行了什么操作、最终为我们返回的是什么(面试的时候一直没听懂面试官想问我什么,再加上自己确实平常只是用MySQL索引,并没有关注索引到底为数据库返回了什么数据,后来反问阶段问了一下这个题,面试官希望我从索引的数据结构,也就是根节点叶子节点层面上去考虑这个题)32. 大三课业情况以及实习时间33. 反问#牛客激励计划##牛客创作赏金赛#
查看33道真题和解析 牛客激励计划 牛客创作赏金赛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务