- 博客(31)
- 收藏
- 关注
原创 力扣之1412.查找成绩处于中游的学生
分析:首先,我们先看题,题目要求要找出没有当过第一和最后的人,没有参加过考试的不算,我们可以先按照考试id分组,按照分数排序,正序倒序都要,找出每个人在每个考试的排名,然后先取出没有得过第一和最后的人,因为这样会包含在其他考试得过第一或者最后的人,所以我们应该在取出得过第一和最后的id,筛选出在没有得过第一和最后并且也不再得过第一和最后表里的人,然后连接学生表,得到姓名。
2024-10-18 20:50:41
561
原创 力扣之1398.购买了产品A和产品B却没有购买产品C顾客
分析:看到题之后,我们可以先把商品表按照顾客id分组,分完组后拼接每个组内的商品,然后使用like判断是否满足条件。
2024-10-16 22:19:39
1048
原创 力扣之1393.股票的资本损益
分析:这道题目很短,也很简单,如果没有理解题目,可以看例子,这个道题让求的是每个股票的总体收益,我们可以先按照股票名字分组,然后算出买入的总和和卖出的总价钱,然后用卖出的总价钱减去买入的总价钱,就得出了收益,这道题很简单,就没有写图表分析,相信大家都能看懂。
2024-10-14 21:55:06
1037
原创 力扣之1355.活动参与者
分析:首先,我们可以先按照活动分组,然后算出每个活动中的id个数,然后按照这个总数进行排序,正序和倒序,然后不要排名为一的数据。pandas分析:和sql 的解法差不多。
2024-10-09 21:57:00
904
原创 力扣之1350.院系无效的学生
分析:首先我们先把学生表和部门表进行左连接,连接条件为department_id和id,然后取出部门表中id为空的数据,然后输出出来所需要的列。今天偷个懒,写了到简单的题。分析,与sql分析一样。
2024-10-08 22:20:08
1048
原创 力扣之1336.每次访问的交易次数
我们首先先连接两个表,使用左连接,连接条件为user_id=user_id,visit_date=transaction_date,然后我们再按照user_id和visit_date分组,然后在算出transaction_date的值,会分别算出每个人每天的次数,然后我们在按照次数分组,算出每个次数有多少次,然后找出次数最大值,然后建一个新的dataframe对象,新增一列使用for循环添加数据,循环条件是最大值,然后再把这两个表通过次数左连接,然后给空值替换成0,就完成了这道题。
2024-10-07 23:11:02
738
原创 力扣之1322.广告效果
分析:看到题目,我们先了解一下公式,了解完成之后,我们先按照ad_id分组,然后用if算出action为Clicked和Viewed的所有次数,然后再算出Clicked的次数,然后判断所有次数是否为零,如果为零,就返回零,如果不为零,就返回Clicked的次数、所有次数,然后*100保留两位小数。pandas分析,我们先按照ad_id分组算出所有的次数,然后再算出Clicked的次数,然后两个相除*100保留两位小数,然后我们再把所有id取出来然后在用merge左连接,把NaN值换成0,然后在排序就好了。
2024-10-06 22:16:32
780
原创 力扣之1308.不同性别每日分数总计
pandas分析和sql的解题方法大致相同,有一个地方不同,我们首先需要按照时间排序,排完序之后再分组,使用transform算出累加(多这一步的原因是因为我目前知道的最简单的方法),然后取出所需这这三列然后在排序。分析:这道题很简单,可以直接使用窗口函数按照性别分组后按照时间排序算出累加值即可。
2024-10-04 22:51:48
815
原创 力扣之1285.找到连续区间的开始和结束
说明一下这里使用transform('min')而不使用min(),是因为前者更像咱们sql中的窗口函数,而后者会出现一个小bug,当全部都是不连续的时候就会返回空值,因此这里使用transform('min')。pandas分析和sql分析基本上一样。
2024-10-03 20:50:05
490
2
原创 1264.页面推荐
分析:这里我使用的是我感觉非常麻烦的方法,就是一步一步的实现,首先先筛选出Friendship中id=1的用户和朋友id=1的用户,然后我们再likes表中查询这些id的页面,然后去掉id=1喜欢的页面,在按照页面id去重就实现了题目的要求。
2024-09-28 23:02:57
723
原创 力扣之1225.报告系统状态的连续日期
分析:我们首先先找出每个成功和失败表的2019年的数据,然后利用差值判断是否连续,然后算出连续组内的最大值和最小值,然后把两个表的数据连接起来。
2024-09-26 21:55:27
1021
原创 力扣之1212.查询球队积分
分析:首先,按照题目,我们应该先算出每个队伍的的分数,然后在和队伍表连接,然后在排序,其实看到这分析,可能会有人说分析这么简单,怎么实现呢,说实话,实现起来确实有一点点小麻烦,我们可以用if判断,可以算出host队伍的分数,然后在用if算出guest队伍的分数,然后再用union all连接,这样就算出每个队伍的分数,再与队伍表连接,按照队伍id分组,算出每个队伍的总分数,然后排序。
2024-09-25 21:39:37
828
原创 1194.锦标赛优胜者
分析:当看到题目之后,我开始想的是分两次连接,分别连接比赛表中的第一名和第二名,然后计算每个人的分数,但是我感觉那样写很麻烦,然后我就又想了一个办法,就是把第一名和第二名的分数全取出,然后拼接到一起,之后在和运动员表连接,算出每个人的分数,然后筛选出每组最高分。
2024-09-24 14:49:24
1033
原创 力扣之1158.市场分析1
看到题目,是有三张表,正常思维都是把这三个表都用上,我刚开始也是想着三张表的连接条件,如何连接三张表,然后并实现题目中的要求,但是后面确实发现有一张表没有用到,首先我们先把订单表中的2019年的订单筛选出来,然后使用用户表左连接订单表,连接条件是用户id等于买家id,按照日期和用户分组算出每天每个用户所产生的订单数量;
2024-09-24 14:42:03
178
原创 力扣之1127.用户购买平台
分析:当看到题后,事例显示2019-07-02的both后面全部为零,看到这列数据后,我们就应该想到用左连接,并且这个写数据还是构造出来的,我们从原表中构造出结果中的前两列,然后主表算出每个用户每天使用的东西数量,如果为二则返回both否则返回polatform的值,然后算出每个每天的总金额,用户数,连接构造出来的表,然后分组再求和,输出相应的内容即可。
2024-09-21 21:21:51
766
原创 力扣之1132.报告的记录2
分析:根据题目,大部分人会直接解题,先找出是垃圾的帖子,然后左连接移除表,连接条件为post_id=post_id,然后计算移除的帖子每日移除率,然后再算出平均数,很多不细心的人会这样写,但是,这样不对,因为题目中表的下方有一行小字,‘可能会有重复的行’,因此,在后面计算每日移除率的过程中需要用到count()这个函数中都需要把post_id去重,这样才能算出正确的答案。
2024-09-19 21:48:53
543
原创 力扣之1205.每月交易2
首先我们先找出批准交易的id信息,然后我们通过两个表连接找出退单的信息,我们把两个表中的时间,地区、批准交易金额(批准交易 的信息中的amount)和退单金额(退单信息表中的金额),如果没有的话就为零。题目分析:我们看到这道题之后,肯定会想连接方面,但是,这题有很多种情况,例如有一天的日期没有退单的,只有批准交易的,这样的话连接就会很麻烦,所以我们这里使用union连接。
2024-09-14 23:55:59
701
原创 力扣之1097.游戏玩法5
其实只要理解留存率的定义就可以知道,我们应该找出上面首次登录的时间的第二天还有多少用户登录,所以,这里我们要使用左连接,连接条件为表一的用户id=表二的用户id,表一加一天的日期=表二的日期,这样就能把第二天登录的人员找到,接下来,就很简单了,我们可以按照表一的时间分组,然后算出注册的人数,然后再算出第二天还有多少人登录,相除即可。当看到题目后,我们应该先了解什么是留存率,题目给出的定义为:假定安装日期为x的玩家数量为N,其中在x之后的第一天重新登录的玩家数量为M,M/N就是第一天留存率。
2024-09-12 23:50:40
340
原创 力扣之1083.销售分析2
我们看到题,最可能想到的方法就是,先找出购买iPhone的人的id,然后再取出除了这些之外的人id,这是不是就把没有购买iPhone 的人员都取出来了,这样,我们再在这些id中找到购买S8的人员id,然后在去重,这样就完成了题目。我们可以先给两个表连接起来,按照buyer_id分组之后给买过的商品连起来,这样就可以直接知道每个人买了什么东西,根据这个,找出符合要求的buyer_id。审题:题目需要找出客户买了S8但是却不能买iPhone的人,这两个东西已经定死了,其他的东西随意购买。
2024-09-11 23:42:53
204
原创 力扣之1098.小众书籍
看到题目我们应该先分析,这道题分几步,第一步,应该先选出上架不满一个月的书籍,然后找出近一年的销售情况的书籍,然后算出销售的数量,然后算出小于10的书籍。
2024-09-11 23:42:34
881
原创 力扣之615.平均工资:公司与部门比较
然后,连接表员工部门表,按照月和部门还有公司平均工资(因为后边要和平均工资对比,所以需要将公司平均工资保留下来)分组求出平均值,然后再与公司平均值做对比,如果高于公司平均工资,输出‘highter’,如果小于公司平均工资,输出‘lower’,如果等于公司平均工资,输出‘same’。正常是这样求的,但是,我们这里需要用结果表连接另一个表,并且,连接条件还是员工id,所以,这里我们需要用窗口函数来保存员工id字段。找出各个部门员工的平均薪资与公司平均薪资之间的比较结果(更高 / 更低 / 相同)。
2024-09-08 23:52:28
499
原创 力扣之1082销售分析1
但是,新的问题又出现了,我们如何取出最大的消费金额或者如果有相同消费金额并且是最大的,如何把两个人都输出,有人可能一看见最大。,可能就会想到max聚合函数,但是,这里max只能取出一个最大值,并不能取出两个,和明显,不符合要求,这里需要考虑一个新的方法。通过分组,可以把相同的人分到一起,然后我们可以通过sum()聚合函数,算出每个人的消费总额。dense_rank():有并列的排序,但是不跳序:1,1,2,3,....rank():有并列的排序,1,1,3,4....我们可以先看两个表输出结果,看图分析。
2024-09-07 23:49:39
358
原创 力扣之601.体育馆的人流量
首先我们可以先对需要判断是否连续的列进行升序排列,然后再用排序的列的值减去排名,当连续时,差值就会为一个相同的数,不连续,差值就不相同,如果想要知道有几天连续,可以对差值进行分组,然后在count(),这样就就能判断连续多少天,或者多少次。紧接着,我们按照差值进行分组然后count()算出连续的天数(如果差值相同表示连续)首先,我们先将筛选出来的数据按照id进行升序排列,在后边加上排名的序号。当我们知道这些之后,就可以判断出这道题是条件,连续问题。然后,取出count>=3的数据,按照时间升序排列。
2024-09-01 23:07:04
480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅