数据分析面试必备——SQL窗口函数你会了吗? 本文所有题目均来源于牛客网。 由于做题过程中,自己会弄混sql的书写顺序和运行顺序,所以在做题前,大家也可以根据我的笔记对书写顺序和运行顺序进行巩固一下,免得做题时会出错。 sql的书写顺序为: sql的运行顺序与书写顺序不同: 运行时会先运行以下2-5语句即from-where-group by然后运行select-having,子句,最后运行order by语句。 题目1: 现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况,请取出相应明细数据,对于在8月份没有练习过的用户,答题数结果返回0. 所用数据来源于用户信息表user_profile和question_detail.
题目想要我们得到以下运行结果:
做题思路:根据题目要求的运行结果可知,输出结果有两个表的字段或汇总字段,所以考虑连接,这里关于联结的知识如果忘了,可以回看以往笔记多表查询中-表的联结:光彗:多表查询SQL语句题目要求复旦大学的每个用户在8月份练习的情况,所以查询条件是 university = “复旦大学”,并且题目要求查询的是每个用户在8月份的题目情况,所以筛选条件为日期=8月,这里只有日期,所以还需要用month()将日期中的月份提取出来,并且提取条件应该为08,因为题目还要求返回8月份没有练习过的用户的答题情况,所以筛选条件应该为在8月答题了和没答题的复旦大学用户,用代码表示为:WHERE university = “复旦大学”AND (MONTH(b.date) = “08” or MONTH(b.date) IS NULL)。题目返回每个用户练习的总题目数和回答正确的题目数情况,并且要求对于没有练习过的用户,答题数结果返回0.这里可以考虑聚合函数sum()将答题情况汇总。 根据以上思路,最后的代码如下: 输出结果为:
题目2: 现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。
解题思路:题目要求返回每个学校的最低gpa,每个就涉及到分组了,而最低就涉及到排序。也就是既要分组也要排序,所以考虑窗口函数。涉及排序的窗口函数为dense_rank,rank()和row_number() ,因为本题不存在相同的gpa,所以用row_number() 作为窗口函数即可。关于窗口函数可以回看笔记:光彗:SQL高级功能:窗口函数、存储过程及经典排名问题、topN问题等 所以本题用代码显示如下: 输出结果如下:
本题需要注意sql的运行顺序,不然就会错把代码写成以下代码了:
本文题目来源于牛客网。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/76173.html