- 博客(67)
- 收藏
- 关注
原创 #1565.按月统计订单数与顾客数
这题要要查询按月统计的金额大于20的订单和客户数,使用Pandas的话,应该先将列表转化为矩阵来操作,再将操作矩阵列日期格式改成月份的格式.通过挑选出金额大于20的记录,找出所有有用记录,再按照月份分组,统计订单数和人数,因为存在多个大于20订单属于同一用户所有需要对人数统计去重,即。
2025-06-10 10:33:23
280
原创 #1555.银行账户概要
这个要求每个用户的当前余额,并且是否透支,即是否小于0,Users表记录着每个账户的当前余额数,Transaction表记录着转账记录,其中的paid_by字段是转出方,是消耗金额的,paid_to是接受方,是接收金额,amount字段代表着转账记录金额,所以,可以使用union all将每次转账记录对于每个人的影响记录下来,即。这样可以让转账影响记录与用户相连接,让记录金额与余额求和,就能得出转账结果后的余额,在根据结果余额是否小于0判断是否透支了.即。
2025-06-10 08:45:06
358
原创 #1549.每件商品的最新订单
先将表转为可操作的数据矩阵,再从订单表数据中找打每件商品的最大订单日期,先存入一个结果矩阵,将这个结果矩阵与产品表相连接在对结果排序,再摘取需求字段就能得出结果。这题要找到没见商品的最新订单,使用python解,先导入pandas包。
2025-06-04 17:30:40
431
原创 #1543.产品名称格式修复
定义一个函数让表格数据导入丞pandas中的数据矩阵,因为要求product_name是小写字符且不包括钱够空格,所以应该对product_name列进行字母下锁并且删除前后空格,因为是按月统计所以日期应该改成%Y-%m的形式。返回的结果要进行分组的统计按照product_name,sale_date分组统计数量并且返回结果是矩阵的形式并且设置列名是total,即。这题要求统每个月的各个产品的销售总数,使用python操作的话,先导入pandas包。
2025-06-04 16:57:13
193
原创 #1511.消费者下单频率
这题要求再2020年6月和2020年7月,每个月至少花费100元的客户的customer_id和customer_name,所以应该将Orders表与Product表和Customers表相连接得出每个订单的价格和所属用户,并且因为订单日期是'YYYY-MM-DD'形式的而要求的以月份形式,所以要转化下格式到月,再根据单价和数量,求出花费总额,即。然后再挑出每个用户中2020年6月与2020年7月有订单的用户,并且每个月份花费总额不在小于100的用户之中,即。
2025-05-28 20:41:25
465
原创 #1501.可以放心投资的国家
这题要找到一个可以投资的国家,Person表记录着一些用户的电话号码,其中电话前三个数字代表着国家的国家码,Country表就记录着每个国家的国家码,Calls表代表着打电话双方时长,因为每个国家统计通话时长会将接听双方的时间都要记录,所以可以对Calls表使用union all将接听双方转变为一列,统计时长,即。再将结果与Country表相连接,得到每个用户的所属国家,并且按照国家分组求平均通话时长,再与原来求的全部平均通话时长相比较,筛选出国家平均通话时长比全部通话时长长的国家,即。
2025-05-28 19:36:05
324
原创 #1495.上月播放的儿童适宜电影
这题要求找到2020年6月播放的儿童适宜电影去重名,TVProgram表记录的是播放的时间,Content表记录的是各个播放的内容,所以应该对Content表筛选处属于电影且是儿童适宜的内容,即。再让结果和TVProgram表相连接,得到播放时间,让播放时间限定在2020年6月去重,就是所有结果,即。
2025-05-28 17:31:39
194
原创 #1479.周内每天的销售情况
这题要求周内每天每个商品类别下订购了多少单位数量,因为需要单独求每周的订购单位,所以可以使用weekday()函数对order_date找到每天星期数,并且让orders表月items表相连接,找到每个订单的类别,即。因为需要每个周几都要有一列单独列,对每个种类统计订单的数量,所以可以使用sum()函数加条件,将列转成行,再按照种类分组聚合可得出结果,
2025-05-28 17:11:49
383
原创 #1468.计算税后工资
这题要计算每个员工的税后工资,而根据需求,每个员工需要交税的比例是按照工资最高员工的工资交税,所以应该使用max()开窗,根据公司id分组,建立一个代表每个公司最高工资的列,即。再使用case when 按照要求建列代表着每个员工应该交税的比例,依据就是建立每个公司最大工资的值,分成各个档次,即。根据这个结果,计算税后工资,即当前工资减去工资乘以交税比例的结果就是税后工资,即。
2025-05-28 16:08:30
201
原创 #1459.矩形面积
这题要根据对角的两个坐标点,求矩阵面积,Points表记录着所有坐标点,所以可以根据两个点横坐标相减的绝对值乘以纵坐标相减的绝对值得出面,根据示例1可得知一个点和另外一个点必须不在同一个横轴上,可以让一个坐标id大于另一个点id,再让Points表与自己进行交叉连接列出所有情况,再筛除所有面积为零的情况,就是所有对角坐标组成矩阵的情况,即。
2025-05-28 15:49:21
147
原创 #1454.活跃用户
这样可以让当前日期和偏移日期相减得到的日期差为4的,就是存在连续5天登录的用户,因为去重每天每个用户的数据只有一条,所以如果差值为4,当前日期数据,和偏移到的日期相隔数据日期一定是相连的,因为要求每个用户的名字和id所以应该将这个偏移结果越Accounts表相连接,得到他们的名字,再对id,去重,保留名字字段就是所得结果。
2025-05-28 15:13:39
278
原创 #1445.苹果和桔子
这题要求每一天的苹果和桔子的销售数目差异,就应该因为sales表中的每天数据记录是先苹果后桔子的记录,所以可以使用开窗函数中的lead()函数,对日期分组,再按fruit列排序后,偏移一行,这样可以将每天的苹果和桔子的销售数据列在一行,将结果相减就可得出结果,并且剔除空行就是所有结果,
2025-05-28 11:56:20
195
原创 #1440.计算布尔表达式的值
这题要计算表Expressions中的布尔值,因为Expressions表指记录了表达参数没有具体的值,不能使用数学计算符号,但是Variables记录着每个表达参数所对应的值,所以应该先将Expressions表与Variables表相连接,得到每个表答参数对应的值,即。再使用case when建立一个列将数值比较结果与operator列对应符号相等就返回true,否则返回false这样就能将所有结果相列出,即。
2025-05-28 11:39:20
443
原创 #1435.制作会话柱状图
这题要求每个用户在app上的访问时长情况,但是Sessions表记录的每个访问会话的时间是按秒计算的,结果需要按照分钟统计每个时间段的会话数量,所以要将每个会话时间除以60统计数量,并且需要根据题目要求将每个会话分成"[0-5>","[5-10>","[10-15>",和"15 or more"类,进行统计,即。因为存在会话有可能所有会话不不被所有种类包括的情况,这样对制作柱状图的字段数据会有缺失,所以应该使用union做一个包括所有种类的表,即。
2025-05-27 20:45:16
335
原创 #1421.净现值查询
这题要求Queruers表中每一次查询的净现值,净现值就是NPV表中的npv字段值,所以可以让Queries表与NPV表相连接,条件就是id字段与year字段一同相等,这样可以列出Queries表中没一次查询数据可得的净现值,因为存在Queries表的数据没有净现值的情况,所以需要使用ifnull函数对于npv返回0,即结果。
2025-05-27 20:08:32
182
原创 #1412.查找成绩处在中游的学生
这题要求成绩处于中游的学生,指至少参加一次测验得分不是最高也不是最低的学生,即参加测试没有最高和最低得分的学生,所以,可以使用开窗函数,对Exam表按照exam_id分组,max()函数和min()函数分别开窗出一列,记录每次测试的最高分与最低分,即。再条件筛选出得分和最高得分或者与最低得分相同的学生student_id,对于Exam表进行筛除,这些学生的student_id,剩下的student_id就是中游学生,再与Stduent表相连接,就可得知这些学生名字字段,即结果。
2025-05-27 19:58:57
252
原创 #1398.购买了产品A和产品B却没有购买产品C的顾客
这题要求找到购买了A产品和B产品却没有购买C产品的顾客,所以可以从订单表Orders表筛选出买了A产品的顾客,买了B产品的顾客和没买C产品的顾客,让这个三个条件并列存在就可得出目标客户,即。再让结果和Customers表相连接,就能得出要求的customer列,即最终结果。
2025-05-27 19:28:49
191
原创 #1384.按年度列出销售总额
将这个表与sales表相连接并且限制条件年份大于或等于开始年份,年份小于或等于结束年份,就能罗列出每个产品包括的所有销售年份,再使用case when建立字段让年份等于开始年份与结束年份的情况,返回结束时间与开始时间相减乘以每天平均销售,或者年份只等于开始年份的情况,返回年份拼接'-12-31'日期与开始时间相减乘以每天平均销售,或者年份只等于结束年份的情况,返回年份拼接'-01-01'被结束时间相减乘以每天平均销售,否则返回365*每天平均销售,这样就是所有销售总额的情况,即。
2025-05-27 17:01:51
497
原创 #1369.获取最近第二次的活动
这题要求每个用户最近第二次的活动,或者用户只有一次活动返回该活动,所以该对表UserActivity进行使用row_number()函数对于startDate进行倒序排序,取结果中排序为2的数据.和使用count()开窗,结果中计数为1的数据,这两个结果的数据就是所得结果,即。
2025-05-27 11:37:43
284
原创 #1364.顾客的可信联系人数量
这题要从发票表找到每个顾客的姓名,顾客的联系人数量和可信联系人的数量,可信顾客记录在Customers顾客表中,所以可以将发票表Invoices与顾客表Customers相连接找到每个发票表顾客的姓名,即。可以对联系方式表Contacts进行按照user_id的分组统计,找到每个客户的联系人数量,再使用条件统计这些联系人中存在于顾客表Customers的联系人,就是可信联系人的数量,即。再将上述得到的两个结果相连接,并且将没有联系的客户使用ifnull函数将其关联结果的null值转为0,即为所有结果,
2025-05-27 11:15:04
318
原创 #1355.活动参与者
这题要求出既不是最多也不是最少参与者的活动,从Friends表可以找到每个参与者参与的活动,所以可以按照activity分组统计出每个活动的参与人数,即。可以对这个查询结果,使用开窗函数,计算列出最大值与最小值的列,在以此结果为表,找到统计数不是最大值也不是最小的活动,即。
2025-05-27 10:09:21
184
原创 #1350.院系无效的学生
这题要求哪些院系不存在的学生id和姓名,所以应该找出Students表中department_id不存在于Departments表的数据,可以使用子查询,找到这些数据,并摘取id和name字段,即。
2025-05-27 08:54:10
119
原创 #1336.每次访问的交易次数
这题要求银行客户在一次访问是的交易次数,Visits表是记录着客户id以及访问时间,Transactions表记录着每个客户id,及交易时间与金额,所以将Visits表与Transactions表按照客户id与时间相关联,其中Visits表作主表左关联Transactions表,这样Transactions1不存在的数据就会补null值,null的数据就是访问了银行却没有交易的客户,就可以统计出记录用户的交易次数,以及每次的访问次数,即。将这两个表使用union相拼接,就能记录出没有访问的交易数,即。
2025-05-26 21:28:32
1456
原创 #1322.广告效果
这题要求每一条广告的ctr,并且保留两位小数,因为要求不关心action为Ingnored的广告,所以应该先剔除action为Ignored的数据,然后按照ad_id分组计算数据总数,除以action为Clicked的数据数量就是存在数据的ctr值,即。因为,虽然action为Ignored不计入ctr计算但是却记录ad_id,所以要将上升计算数据和完整记录的ad_id拼接,计数,即。
2025-05-26 19:28:56
267
原创 #1308.不同性别每日分数总计
这题要求每中性别每一天的总分,就是当前天的分数加上之前所以天的总分数,,所以应该对Scores表进行sum开窗,按照gender分组,day排序,并且限定窗口大小的当前行到往上所有行,因为要求的按照gender,day1升序排序所有还应该全局对他们排序,即。
2025-05-26 17:56:02
154
原创 #1303.求团队人数
将这个得出的结果表和Employee表相关联,并且筛选处employee_id与team_size字段即,可得结果。这题要求每个员工所在团队的总人数,所以应该先将每个团队总人数求出,即。
2025-05-26 17:39:30
136
原创 #1294.不同国家的天气类型
而天气类型的定义根据要求分为'Cold','Hot','Warm',但是Weather表只有weather_stats 天气度数,所以要求他们的平均天气度数,再使用case when 函数将他们的平均度数值分成天气类型显示,即。因为,要最终结果是国家名称与天气类型的表的形式所以,要将上述结果表与Countries表相关联,得出结果为,这题要求每个国家在2019年11月的天气状态,所以应该使用like先筛选出2019年11月的数据,即。
2025-05-26 17:31:59
155
原创 #1285.找到连续区间的开始和结束数字
这题要找到连续数字中,区间的开始数字与结束数字,所以可以对Logs表的log_id进行使用的row_number()排序,并且让log_id,减去排序结果值,相同结果就是练习的数字,即。再对结果分组,其中每组的最小数字就是开始数字,最大数字就是结束数字,即。
2025-05-26 17:02:22
150
原创 #1270.向公司CEO汇报工作的所有人
这样可以看出每个职工的最多3次间接关系的经理,分别可为一级经理,二级经理,三级经理这间接关系中的一个经理为CEO即employee_id =1的人就是直接或者间接向CEO汇报工作的职工,即。这题要求找到直接或者间接向公司CEO汇报工作的职工的employee_id,因为要求经理之间的间接关系不超过3个经理,所以可以采用employees表进行2次自连接,即。因为CEO不需要向自己汇报工作,所以要从里面剔除掉CEO本人即。
2025-05-26 16:45:32
341
原创 #1264.页面推荐
这题要求向user_id=1的推荐其朋友喜欢的页面,所以应该先Friendship表找出user_id=1的用户的朋友,表中user1_id=1或者user2_id=1对应的用户,即。因为要求不要推荐该用户已经喜欢的页面所以还应该将推荐页面中,该用户已经喜欢的页面剔除出去,即。再找到这些朋友在Likes表中喜欢的页面,并且去重,即。
2025-05-26 16:21:50
208
原创 #1241.每个帖子的评论数
这题要查找每个帖子的评论数,而评论的记录和帖子的记录都在submissions表中,其中parent_id是null的帖子,所以可以先找出帖子,即。因为有删除的帖子存在评论的可能,但是却不能将删除帖子的评论纳入统计,所以应该挑先出存在的贴子在统计评论数量即,但是如果没有评论的帖子将被自动筛除,为了保留所有的贴子可以使用union连接所有存在的帖子,即。因为已经存在有评论的帖子就会被重复记录,所以一个再次分组统计去重,即。
2025-05-26 15:45:49
324
原创 #1225.报告系统状态的连续日期
再筛选出题目要求的date在'2019-01-01'到'2019-12-31'的数据并且,因为相同状态的任务日期差是同一个日期所以可以按照state与diff分组,其中分组后的最小日期就是起始日期,最大的日期就是结束日期,即可得结果。这样所有的任务都将在一个表记录,在对这个表进行使用subdate函数对date数据减去按照state分组按照date使用row_number排序的结果这样如果连续的状态任务得出的结果会显示一个相同的日期即,
2025-05-26 15:21:07
240
原创 #1212.查询球队积分
这题要求查询球队积分,并且对球队进行积分排名,matches表是比赛结果表记录着比赛的两支球队本场比赛得分结果,需要对双方于此次比赛得分进行大小比较得出获胜球队,对其加三分,而落败球队不得分,但是如果平局会让两支球队都加一份,所以需要case when 来对matches表进行添加一列用来记录比赛结果,即。再使用union all 函数将比赛的两支球队的两列数据拼接成一列数据,与比赛结果,再使用sum函数与case when 的协同使用,就能得出比赛所有球队的得分,但是会省略掉没得分的球队所以为。
2025-05-23 15:02:20
316
原创 #1205.每月交易 ||
这题要求找出每个月每个国家的交易金额和数量,和退单数量与金额,而交易记录属于Transactions表,而退单记录属于Chargebacks表,可以单独按照国家和月份计算交易的金额和数量,再计算出每月每个国家的退单数量和金额,使用union连接,即 select date_format(trans_date,'%Y-%m') month,country,count(case when state='approved' then 1 end) approved_count,sum(case when stat
2025-05-23 14:26:06
1219
原创 #1194.锦标赛优胜者
这题要求玩家表中的每组得分第一的玩家id以及小组id,赛事表中记录着,每人比赛的得分,因为赛事表一行数据会记录两个玩家得分,都是要求的分数依据,所以可以将俩个列数据union all 合并成一个玩家id,对应一个分数的形式数据,再通过sum聚合就能得出这场赛事每个玩家id的得分,即。
2025-05-23 13:17:14
248
原创 #1173.即时食物配送 |
这题要求即时订单所占的百分比,即时订单就是order_date与customer_pref_delivery_date相等的数据为即时订单数据,所以统计即时数据数量,并且除以总的订单数据数量,所得结果就是即时订单所占的百分比,即结果为。
2025-05-22 10:34:15
173
原创 #1159.市场分析 ||
这题要求卖家用户卖出的第二单,是不是他们最喜欢的品牌,Users表记录的是他们最喜欢的品牌,而Items表是记录品牌id,让Users表与Items表相连接就可以得出,他们最喜欢的品牌id,即。但是连接后会参数很多数据冗余让结果产生了多种可能结果,需要让同时存在yes和no的结果只输出yes,所以要对结果排序并且只输出排序为1的结果就可得出最终结果即。让这俩个结果按照用户连接并且筛选处第二单,且让item_id=item_id的数据输出yes,否则就输出no,即可得出第二单是否是最喜欢品牌的结果。
2025-05-22 10:18:56
724
原创 #1149.文章浏览 ||
应该按照viewer_id,view_date分组统计出浏览数量,因为可能存在重复行,所以要对统计的字段article_id进行去重操作即。这题因为是要找到一天浏览至少两篇文章的人,所以应该统计出每人每天浏览了多少篇文章,所以。要找到一天浏览至少两篇文章的人所以要条件查询出浏览量大于1的viewer 的id即。
2025-05-21 21:06:18
196
原创 #1142.过去30天的用户活动 ||
根据题目可得,需要条件筛选处2019-07-27往前一个月的数据,而且因为用户可以有多个会话,所以要先对每个人分区统计会话数,因为是要统计每个人平均会话数,所以要对会话数求平均并且保留俩位小数。
2025-05-21 20:34:30
318
原创 #1132.报告记录 ||
在统计出这些数据中以action_date分组,中移除的数据,除以每天总量再求和除以总天数,那么可得平均每天移除比,但是移除表的日期与动作表日期稍微延后了,所以需要通过连接得出动作表的action_date的哪些数据被移除,所以。这里从题目了解到,从Actions表中记录的extra=spam的数据,是在Removals表中可能被移除的数据,以action_date分组,每天记录的这个数据数量即。现在让action表的extra=spam的数据数,除以被移除的数据量再求平均就可以得出每天平均移除率。
2025-05-21 20:03:23
331
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅